Changeset 1923


Ignore:
Timestamp:
Oct 18, 2010 11:59:55 AM (10 years ago)
Author:
gah
Message:
 
Location:
branches/blt4/gui/scripts
Files:
93 edited
1 moved

Legend:

Unmodified
Added
Removed
  • branches/blt4/gui/scripts/Makefile.in

    r1919 r1923  
    6464                $(srcdir)/heightmapviewer.tcl \
    6565                $(srcdir)/histogram.tcl \
    66                 $(srcdir)/historesult.tcl \
     66                $(srcdir)/histogramresult.tcl \
    6767                $(srcdir)/htmlviewer.tcl \
    6868                $(srcdir)/icons.tcl \
  • branches/blt4/gui/scripts/analyzer.tcl

    r1897 r1923  
    109109
    110110    itk_component add simbg {
    111         frame $itk_interior.simol.simbg -borderwidth 0
     111        frame $itk_interior.simol.simbg -borderwidth 0
    112112    } {
    113         usual
    114         rename -background -simcontrolcolor simControlColor Color
     113        usual
     114        rename -background -simcontrolcolor simControlColor Color
    115115    }
    116116    pack $itk_component(simbg) -expand yes -fill both
     
    118118    set simtxt [$tool xml get tool.action.label]
    119119    if {"" == $simtxt} {
    120         set simtxt "Simulate"
     120        set simtxt "Simulate"
    121121    }
    122122    itk_component add simulate {
    123         button $itk_component(simbg).simulate -text $simtxt \
    124             -command [itcl::code $this simulate]
     123        button $itk_component(simbg).simulate -text $simtxt \
     124            -command [itcl::code $this simulate]
    125125    } {
    126         usual
    127         rename -highlightbackground -simcontrolcolor simControlColor Color
     126        usual
     127        rename -highlightbackground -simcontrolcolor simControlColor Color
    128128    }
    129129    pack $itk_component(simulate) -side left -padx 4 -pady 4
     
    133133    set url [Rappture::Tool::resources -huburl]
    134134    if {"" != $url && "" != $_appName} {
    135         itk_component add hubcntls {
    136             frame $itk_component(simbg).hubcntls
    137         } {
    138             usual
    139             rename -background -simcontrolcolor simControlColor Color
    140         }
    141         pack $itk_component(hubcntls) -side right -padx 4
    142 
    143         itk_component add icon {
    144             label $itk_component(hubcntls).icon -image [Rappture::icon ask] \
    145                 -highlightthickness 0
    146         } {
    147             usual
    148             ignore -highlightthickness
    149             rename -background -simcontrolcolor simControlColor Color
    150         }
    151         pack $itk_component(icon) -side left
    152 
    153         itk_component add about {
    154             button $itk_component(hubcntls).about -text "About this tool" \
    155                 -command [list Rappture::filexfer::webpage \
    156                               "$url/tools/$_appName"]
    157         } {
    158             usual
    159             ignore -font
    160             rename -background -simcontrolcolor simControlColor Color
    161             rename -highlightbackground -simcontrolcolor simControlColor Color
    162         }
    163         pack $itk_component(about) -side top -anchor w
    164 
    165         itk_component add questions {
    166             button $itk_component(hubcntls).questions -text Questions? \
    167                 -command [list Rappture::filexfer::webpage \
    168                               "$url/resources/$_appName/questions"]
    169         } {
    170             usual
    171             ignore -font
    172             rename -background -simcontrolcolor simControlColor Color
    173             rename -highlightbackground -simcontrolcolor simControlColor Color
    174         }
    175         pack $itk_component(questions) -side top -anchor w
     135        itk_component add hubcntls {
     136            frame $itk_component(simbg).hubcntls
     137        } {
     138            usual
     139            rename -background -simcontrolcolor simControlColor Color
     140        }
     141        pack $itk_component(hubcntls) -side right -padx 4
     142
     143        itk_component add icon {
     144            label $itk_component(hubcntls).icon -image [Rappture::icon ask] \
     145                -highlightthickness 0
     146        } {
     147            usual
     148            ignore -highlightthickness
     149            rename -background -simcontrolcolor simControlColor Color
     150        }
     151        pack $itk_component(icon) -side left
     152
     153        itk_component add about {
     154            button $itk_component(hubcntls).about -text "About this tool" \
     155                -command [list Rappture::filexfer::webpage \
     156                              "$url/tools/$_appName"]
     157        } {
     158            usual
     159            ignore -font
     160            rename -background -simcontrolcolor simControlColor Color
     161            rename -highlightbackground -simcontrolcolor simControlColor Color
     162        }
     163        pack $itk_component(about) -side top -anchor w
     164
     165        itk_component add questions {
     166            button $itk_component(hubcntls).questions -text Questions? \
     167                -command [list Rappture::filexfer::webpage \
     168                              "$url/resources/$_appName/questions"]
     169        } {
     170            usual
     171            ignore -font
     172            rename -background -simcontrolcolor simControlColor Color
     173            rename -highlightbackground -simcontrolcolor simControlColor Color
     174        }
     175        pack $itk_component(questions) -side top -anchor w
    176176    }
    177177
    178178    itk_component add simstatus {
    179         text $itk_component(simbg).simstatus -borderwidth 0 \
    180             -highlightthickness 0 -height 1 -width 1 -wrap none \
    181             -state disabled
     179        text $itk_component(simbg).simstatus -borderwidth 0 \
     180            -highlightthickness 0 -height 1 -width 1 -wrap none \
     181            -state disabled
    182182    } {
    183         usual
    184         ignore -highlightthickness
    185         rename -background -simcontrolcolor simControlColor Color
    186         rename -font -textfont textFont Font
     183        usual
     184        ignore -highlightthickness
     185        rename -background -simcontrolcolor simControlColor Color
     186        rename -font -textfont textFont Font
    187187    }
    188188    pack $itk_component(simstatus) -side left -expand yes -fill x
    189189
    190190    $itk_component(simstatus) tag configure popup \
    191         -underline 1 -foreground blue
     191        -underline 1 -foreground blue
    192192
    193193    $itk_component(simstatus) tag bind popup \
    194         <Enter> {%W configure -cursor center_ptr}
     194        <Enter> {%W configure -cursor center_ptr}
    195195    $itk_component(simstatus) tag bind popup \
    196         <Leave> {%W configure -cursor ""}
     196        <Leave> {%W configure -cursor ""}
    197197    $itk_component(simstatus) tag bind popup \
    198         <ButtonPress> {after idle {Rappture::Tooltip::tooltip show %W}}
     198        <ButtonPress> {after idle {Rappture::Tooltip::tooltip show %W}}
    199199
    200200
    201201    itk_component add notebook {
    202         Rappture::Notebook $itk_interior.nb
     202        Rappture::Notebook $itk_interior.nb
    203203    }
    204204    pack $itk_interior.nb -expand yes -fill both
     
    213213    pack $w.info -expand yes -fill both -padx 4 -pady 20
    214214    itk_component add toolinfo {
    215         text $w.info.text -width 1 -height 1 -wrap word \
    216             -borderwidth 0 -highlightthickness 0
     215        text $w.info.text -width 1 -height 1 -wrap word \
     216            -borderwidth 0 -highlightthickness 0
    217217    } {
    218         usual
    219         ignore -borderwidth -relief
    220         rename -font -textfont textFont Font
     218        usual
     219        ignore -borderwidth -relief
     220        rename -font -textfont textFont Font
    221221    }
    222222
     
    231231
    232232    itk_component add abort {
    233         button $w.cntls.abort -text "Abort" \
    234             -command [itcl::code $_tool abort]
     233        button $w.cntls.abort -text "Abort" \
     234            -command [itcl::code $_tool abort]
    235235    }
    236236    pack $itk_component(abort) -side left -expand yes -padx 4 -pady 4
    237237
    238238    blt::scrollset $w.info -xscrollbar $w.info.xs -yscrollbar $w.info.ys \
    239         -window $w.info.text
     239        -window $w.info.text
    240240    blt::tk::scrollbar $w.info.xs
    241241    blt::tk::scrollbar $w.info.ys
     
    243243    pack $w.info -expand yes -fill both -padx 4 -pady 4
    244244    itk_component add runinfo {
    245         text $w.info.text -width 1 -height 1 -wrap none \
    246             -borderwidth 0 -highlightthickness 0 \
    247             -state disabled
     245        text $w.info.text -width 1 -height 1 -wrap none \
     246            -borderwidth 0 -highlightthickness 0 \
     247            -state disabled
    248248    } {
    249         usual
    250         ignore -borderwidth -relief
    251         rename -font -codefont codeFont Font
     249        usual
     250        ignore -borderwidth -relief
     251        rename -font -codefont codeFont Font
    252252    }
    253253    itk_component add progress {
    254         Rappture::Progress $w.progress
     254        Rappture::Progress $w.progress
    255255    }
    256256
     
    266266
    267267    itk_component add resultselector {
    268         Rappture::Combobox $w.top.sel -width 10 -editable no
     268        Rappture::Combobox $w.top.sel -width 10 -editable no
    269269    } {
    270         usual
    271         rename -font -textfont textFont Font
     270        usual
     271        rename -font -textfont textFont Font
    272272    }
    273273    pack $itk_component(resultselector) -side left -expand yes -fill x
    274274    bind $itk_component(resultselector) <<Value>> [itcl::code $this _fixResult]
    275275    bind $itk_component(resultselector) <Enter> \
    276         [itcl::code $this download coming]
     276        [itcl::code $this download coming]
    277277
    278278    Rappture::Tooltip::for $itk_component(resultselector) \
    279         "@[itcl::code $this _resultTooltip]"
     279        "@[itcl::code $this _resultTooltip]"
    280280
    281281    $itk_component(resultselector) choices insert end \
    282         --- "---"
     282        --- "---"
    283283
    284284    itk_component add download {
    285         button $w.top.dl -image [Rappture::icon download] -anchor e \
    286             -borderwidth 1 -relief flat -overrelief raised \
    287             -command [itcl::code $this download start $w.top.dl]
     285        button $w.top.dl -image [Rappture::icon download] -anchor e \
     286            -borderwidth 1 -relief flat -overrelief raised \
     287            -command [itcl::code $this download start $w.top.dl]
    288288    }
    289289    pack $itk_component(download) -side right -padx {4 0}
    290290    bind $itk_component(download) <Enter> \
    291         [itcl::code $this download coming]
     291        [itcl::code $this download coming]
    292292
    293293    $itk_component(resultselector) choices insert end \
    294         @download [Rappture::filexfer::label download]
     294        @download [Rappture::filexfer::label download]
    295295
    296296    if {[Rappture::filexfer::enabled]} {
    297         Rappture::Tooltip::for $itk_component(download) "Downloads the current result to a new web browser window on your desktop.  From there, you can easily print or save results.
     297        Rappture::Tooltip::for $itk_component(download) "Downloads the current result to a new web browser window on your desktop.  From there, you can easily print or save results.
    298298
    299299NOTE:  Your web browser must allow pop-ups from this site.  If your output does not appear, look for a 'pop-up blocked' message and enable pop-ups."
    300300    } else {
    301         Rappture::Tooltip::for $itk_component(download) "Saves the current result to a file on your desktop."
     301        Rappture::Tooltip::for $itk_component(download) "Saves the current result to a file on your desktop."
    302302    }
    303303
    304304    itk_component add results {
    305         Rappture::Panes $w.pane -sashwidth 1 -sashrelief solid -sashpadding {4 0}
     305        Rappture::Panes $w.pane -sashwidth 1 -sashrelief solid -sashpadding {4 0}
    306306    }
    307307    pack $itk_component(results) -expand yes -fill both
     
    309309
    310310    itk_component add resultpages {
    311         Rappture::Notebook $f.nb
     311        Rappture::Notebook $f.nb
    312312    }
    313313    pack $itk_component(resultpages) -expand yes -fill both
     
    315315    set f [$itk_component(results) insert end -fraction 0.1]
    316316    itk_component add resultset {
    317         Rappture::ResultSet $f.rset \
    318             -clearcommand [itcl::code $this clear] \
    319             -settingscommand [itcl::code $this _plot] \
    320             -promptcommand [itcl::code $this _simState]
     317        Rappture::ResultSet $f.rset \
     318            -clearcommand [itcl::code $this clear] \
     319            -settingscommand [itcl::code $this _plot] \
     320            -promptcommand [itcl::code $this _simState]
    321321    }
    322322    pack $itk_component(resultset) -expand yes -fill both
     
    333333    #
    334334    $itk_component(toolinfo) tag configure title \
    335         -font $itk_option(-boldtextfont)
     335        -font $itk_option(-boldtextfont)
    336336
    337337    set mesg [$tool xml get tool.title]
    338338    if {"" != $mesg} {
    339         $itk_component(toolinfo) insert end $mesg title
    340         $itk_component(toolinfo) insert end "\n\n"
     339        $itk_component(toolinfo) insert end $mesg title
     340        $itk_component(toolinfo) insert end "\n\n"
    341341    }
    342342
    343343    set mesg [$tool xml get tool.about]
    344344    if {"" != $mesg} {
    345         $itk_component(toolinfo) insert end $mesg
     345        $itk_component(toolinfo) insert end $mesg
    346346    }
    347347    $itk_component(toolinfo) configure -state disabled
     
    351351    set cntl [$tool xml get tool.control]
    352352    if {"" == $cntl} {
    353         set cntl [$tool xml get tool.control.type]
     353        set cntl [$tool xml get tool.control.type]
    354354    }
    355355    if {"" != $cntl} {
    356         set _control $cntl
     356        set _control $cntl
    357357    }
    358358
     
    366366itcl::body Rappture::Analyzer::destructor {} {
    367367    foreach obj $_runs {
    368         itcl::delete object $obj
     368        itcl::delete object $obj
    369369    }
    370370    after cancel [itcl::code $this simulate]
     
    383383itcl::body Rappture::Analyzer::simulate {args} {
    384384    if {$args == "-ifneeded"} {
    385         # check to see if simulation is really needed
    386         $_tool sync
    387         if {[$itk_component(resultset) contains [$_tool xml object]]
    388               && ![string equal $_control "manual-resim"]} {
    389             # not needed -- show results and return
    390             $itk_component(notebook) current analyze
    391             return
    392         }
    393         set args ""
     385        # check to see if simulation is really needed
     386        $_tool sync
     387        if {[$itk_component(resultset) contains [$_tool xml object]]
     388              && ![string equal $_control "manual-resim"]} {
     389            # not needed -- show results and return
     390            $itk_component(notebook) current analyze
     391            return
     392        }
     393        set args ""
    394394    }
    395395
     
    409409    # if the hold window is set, then put up a busy cursor
    410410    if {$itk_option(-holdwindow) != ""} {
    411         blt::busy hold $itk_option(-holdwindow)
    412         raise $itk_component(hull)
     411        blt::busy hold $itk_option(-holdwindow)
     412        raise $itk_component(hull)
    413413    }
    414414
     
    418418    # if job was aborted, then allow simulation again
    419419    if {$result == "ABORT"} {
    420         _simState on "Aborted"
     420        _simState on "Aborted"
    421421    }
    422422
    423423    # load results from run.xml into analyzer
    424424    if {$status == 0 && $result != "ABORT"} {
    425         set status [catch {load $result} result]
     425        set status [catch {load $result} result]
    426426    }
    427427
    428428    # back to normal
    429429    if {$itk_option(-holdwindow) != ""} {
    430         blt::busy release $itk_option(-holdwindow)
     430        blt::busy release $itk_option(-holdwindow)
    431431    }
    432432    $itk_component(abort) configure -state disabled
     
    448448        }
    449449    } else {
    450         $itk_component(notebook) current analyze
     450        $itk_component(notebook) current analyze
    451451    }
    452452
     
    465465itcl::body Rappture::Analyzer::reset {{when -eventually}} {
    466466    if {$when == "-eventually"} {
    467         after cancel [list catch [itcl::code $this reset -now]]
    468         after idle [list catch [itcl::code $this reset -now]]
    469         return
     467        after cancel [list catch [itcl::code $this reset -now]]
     468        after idle [list catch [itcl::code $this reset -now]]
     469        return
    470470    }
    471471
     
    473473    $_tool sync
    474474    if {![$itk_component(resultset) contains [$_tool xml object]]
    475           || [string equal $_control "manual-resim"]} {
    476         # if control mode is "auto", then simulate right away
    477         if {[string match auto* $_control]} {
    478             # auto control -- don't need button
    479             pack forget $itk_interior.simol
    480 
    481             after cancel [itcl::code $this simulate]
    482             after idle [itcl::code $this simulate]
    483         } else {
    484             _simState on "new input parameters"
    485         }
     475          || [string equal $_control "manual-resim"]} {
     476        # if control mode is "auto", then simulate right away
     477        if {[string match auto* $_control]} {
     478            # auto control -- don't need button
     479            pack forget $itk_interior.simol
     480
     481            after cancel [itcl::code $this simulate]
     482            after idle [itcl::code $this simulate]
     483        } else {
     484            _simState on "new input parameters"
     485        }
    486486    } else {
    487         _simState off
     487        _simState off
    488488    }
    489489}
     
    498498    # only show the last result? then clear first
    499499    if {[$_tool xml get tool.analyzer] == "last"} {
    500         clear
     500        clear
    501501    }
    502502
     
    504504    # each run.xml is loaded as a previous simulation.
    505505    foreach item [$xmlobj children -type run output.load] {
    506         set loadfile [$xmlobj get output.load.$item]
    507         set loadobj [Rappture::library $loadfile]
    508         load $loadobj
     506        set loadfile [$xmlobj get output.load.$item]
     507        set loadobj [Rappture::library $loadfile]
     508        load $loadobj
    509509    }
    510510
     
    538538    set haveresults 0
    539539    foreach item [_reorder [$xmlobj children output]] {
    540         switch -glob -- $item {
    541             log* {
    542                 _autoLabel $xmlobj output.$item "Output Log" counters
    543             }
    544             number* {
    545                 _autoLabel $xmlobj output.$item "Number" counters
    546             }
    547             integer* {
    548                 _autoLabel $xmlobj output.$item "Integer" counters
    549             }
    550             string* {
    551                 _autoLabel $xmlobj output.$item "String" counters
    552             }
    553             histogram* - curve* - field* - drawing3d* {
    554                 _autoLabel $xmlobj output.$item "Plot" counters
    555             }
    556             structure* {
    557                 _autoLabel $xmlobj output.$item "Structure" counters
    558             }
    559             table* {
    560                 _autoLabel $xmlobj output.$item "Energy Levels" counters
    561             }
    562             sequence* {
    563                 _autoLabel $xmlobj output.$item "Sequence" counters
    564             }
    565         }
    566         set label [$xmlobj get output.$item.about.group]
    567         if {"" == $label} {
    568             set label [$xmlobj get output.$item.about.label]
    569         }
    570 
    571         set hidden [$xmlobj get output.$item.hide]
    572         set hidden [expr {"" != $hidden && $hidden}]
    573 
    574         if {"" != $label && !$hidden} {
    575             set haveresults 1
    576         }
     540        switch -glob -- $item {
     541            log* {
     542                _autoLabel $xmlobj output.$item "Output Log" counters
     543            }
     544            number* {
     545                _autoLabel $xmlobj output.$item "Number" counters
     546            }
     547            integer* {
     548                _autoLabel $xmlobj output.$item "Integer" counters
     549            }
     550            string* {
     551                _autoLabel $xmlobj output.$item "String" counters
     552            }
     553            histogram* - curve* - field* - drawing3d* {
     554                _autoLabel $xmlobj output.$item "Plot" counters
     555            }
     556            structure* {
     557                _autoLabel $xmlobj output.$item "Structure" counters
     558            }
     559            table* {
     560                _autoLabel $xmlobj output.$item "Energy Levels" counters
     561            }
     562            sequence* {
     563                _autoLabel $xmlobj output.$item "Sequence" counters
     564            }
     565        }
     566        set label [$xmlobj get output.$item.about.group]
     567        if {"" == $label} {
     568            set label [$xmlobj get output.$item.about.label]
     569        }
     570
     571        set hidden [$xmlobj get output.$item.hide]
     572        set hidden [expr {"" != $hidden && $hidden}]
     573
     574        if {"" != $label && !$hidden} {
     575            set haveresults 1
     576        }
    577577    }
    578578
    579579    # if there are any valid results, add them to the resultset
    580580    if {$haveresults} {
    581         set index [$itk_component(resultset) add $xmlobj]
    582 
    583         # add each result to a result viewer
    584         foreach item [_reorder [$xmlobj children output]] {
    585             set label [$xmlobj get output.$item.about.group]
    586             if {"" == $label} {
    587                 set label [$xmlobj get output.$item.about.label]
    588             }
    589 
    590             set hidden [$xmlobj get output.$item.hide]
    591             set hidden [expr {"" != $hidden && $hidden}]
    592 
    593             if {"" != $label && !$hidden} {
    594                 if {![info exists _label2page($label)]} {
    595                     set name "page[incr _pages]"
    596                     set page [$itk_component(resultpages) insert end $name]
    597                     set _label2page($label) $page
    598                     set _label2desc($label) \
    599                         [$xmlobj get output.$item.about.description]
    600                     Rappture::ResultViewer $page.rviewer
    601                     pack $page.rviewer -expand yes -fill both -pady 4
    602 
    603                     set end [$itk_component(resultselector) \
    604                         choices index -value ---]
    605                     if {$end < 0} {
    606                         set end "end"
    607                     }
    608                     $itk_component(resultselector) choices insert $end \
    609                         $name $label
    610                 }
    611 
    612                 # add/replace the latest result into this viewer
    613                 set page $_label2page($label)
    614 
    615                 if {![info exists reset($page)]} {
    616                     $page.rviewer clear $index
    617                     set reset($page) 1
    618                 }
    619                 $page.rviewer add $index $xmlobj output.$item
    620             }
    621         }
     581        set index [$itk_component(resultset) add $xmlobj]
     582
     583        # add each result to a result viewer
     584        foreach item [_reorder [$xmlobj children output]] {
     585            set label [$xmlobj get output.$item.about.group]
     586            if {"" == $label} {
     587                set label [$xmlobj get output.$item.about.label]
     588            }
     589
     590            set hidden [$xmlobj get output.$item.hide]
     591            set hidden [expr {"" != $hidden && $hidden}]
     592
     593            if {"" != $label && !$hidden} {
     594                if {![info exists _label2page($label)]} {
     595                    set name "page[incr _pages]"
     596                    set page [$itk_component(resultpages) insert end $name]
     597                    set _label2page($label) $page
     598                    set _label2desc($label) \
     599                        [$xmlobj get output.$item.about.description]
     600                    Rappture::ResultViewer $page.rviewer
     601                    pack $page.rviewer -expand yes -fill both -pady 4
     602
     603                    set end [$itk_component(resultselector) \
     604                        choices index -value ---]
     605                    if {$end < 0} {
     606                        set end "end"
     607                    }
     608                    $itk_component(resultselector) choices insert $end \
     609                        $name $label
     610                }
     611
     612                # add/replace the latest result into this viewer
     613                set page $_label2page($label)
     614
     615                if {![info exists reset($page)]} {
     616                    $page.rviewer clear $index
     617                    set reset($page) 1
     618                }
     619                $page.rviewer add $index $xmlobj output.$item
     620            }
     621        }
    622622    }
    623623
     
    625625    set max [$itk_component(resultselector) choices size]
    626626    for {set i 0} {$i < $max} {incr i} {
    627         set first [$itk_component(resultselector) choices get -label $i]
    628         if {$first != ""} {
    629             set page [$itk_component(resultselector) choices get -value $i]
    630             set char [string index $page 0]
    631             if {$char != "@" && $char != "-"} {
    632                 $itk_component(resultpages) current $page
    633                 $itk_component(resultselector) value $first
    634                 set _lastlabel $first
    635                 break
    636             }
    637         }
     627        set first [$itk_component(resultselector) choices get -label $i]
     628        if {$first != ""} {
     629            set page [$itk_component(resultselector) choices get -value $i]
     630            set char [string index $page 0]
     631            if {$char != "@" && $char != "-"} {
     632                $itk_component(resultpages) current $page
     633                $itk_component(resultselector) value $first
     634                set _lastlabel $first
     635                break
     636            }
     637        }
    638638    }
    639639}
     
    646646itcl::body Rappture::Analyzer::clear {} {
    647647    foreach obj $_runs {
    648         itcl::delete object $obj
     648        itcl::delete object $obj
    649649    }
    650650    set _runs ""
     
    659659
    660660    foreach label [array names _label2page] {
    661         set page $_label2page($label)
    662         $page.rviewer clear
     661        set page $_label2page($label)
     662        $page.rviewer clear
    663663    }
    664664    $itk_component(resultselector) value ""
     
    670670    $itk_component(resultselector) choices insert end --- "---"
    671671    $itk_component(resultselector) choices insert end \
    672         @download [Rappture::filexfer::label download]
     672        @download [Rappture::filexfer::label download]
    673673    set _lastlabel ""
    674674
     
    700700
    701701    switch -- $option {
    702         coming {
    703             #
    704             # Warn result that a download is coming, in case
    705             # it needs to take a screen snap.
    706             #
    707             if {![regexp {^(|@download|---)$} $page]} {
    708                 set f [$itk_component(resultpages) page $page]
    709                 $f.rviewer download coming
    710             }
    711         }
    712         controls {
    713             # no controls for this download yet
    714             return ""
    715         }
    716         start {
    717             set widget $itk_component(download)
    718             if {[llength $args] > 0} {
    719                 set widget [lindex $args 0]
    720                 if {[catch {winfo class $widget}]} {
    721                     set widget $itk_component(download)
    722                 }
    723             }
    724             #
    725             # See if this download has any controls.  If so, then
    726             # post them now and let the user continue the download
    727             # after selecting a file format.
    728             #
    729             if {$page != ""} {
    730                 set ext ""
    731                 set f [$itk_component(resultpages) page $page]
    732                 set arg [itcl::code $this download now $widget]
    733                 set popup [$f.rviewer download controls $arg]
    734                 if {"" != $popup} {
    735                     $popup activate $widget below
    736                 } else {
    737                     download now $widget
    738                 }
    739             } else {
    740                 # this shouldn't happen
    741                 set file error.html
    742                 set data "<h1>Not Found</h1>There is no result selected."
    743             }
    744         }
    745         now {
    746             set widget $itk_component(download)
    747             if {[llength $args] > 0} {
    748                 set widget [lindex $args 0]
    749                 if {[catch {winfo class $widget}]} {
    750                     set widget $itk_component(download)
    751                 }
    752             }
    753             #
    754             # Perform the actual download.
    755             #
    756             if {$page != ""} {
    757                 set ext ""
    758                 set f [$itk_component(resultpages) page $page]
    759                 set item [$itk_component(resultselector) value]
    760                 set result [$f.rviewer download now $widget $_appName $item]
    761                 if { $result == "" } {
    762                     return;             # User cancelled the download.
    763                 }
    764                 foreach {ext data} $result break
    765                 if {"" == $ext} {
    766                     if {"" != $widget} {
    767                         Rappture::Tooltip::cue $widget \
    768                             "Can't download this result."
    769                     }
    770                     return
    771                 }
    772                 regsub -all {[\ -\/\:-\@\{-\~]} $title {} title
    773                 set file "$title$ext"
    774             } else {
    775                 # this shouldn't happen
    776                 set file error.html
    777                 set data "<h1>Not Found</h1>There is no result selected."
    778             }
    779 
    780             set mesg [Rappture::filexfer::download $data $file]
    781             if {[string length $mesg] > 0} {
    782                 Rappture::Tooltip::cue $widget $mesg
    783             }
    784         }
    785         default {
    786             error "bad option \"$option\": should be coming, controls, now, start"
    787         }
     702        coming {
     703            #
     704            # Warn result that a download is coming, in case
     705            # it needs to take a screen snap.
     706            #
     707            if {![regexp {^(|@download|---)$} $page]} {
     708                set f [$itk_component(resultpages) page $page]
     709                $f.rviewer download coming
     710            }
     711        }
     712        controls {
     713            # no controls for this download yet
     714            return ""
     715        }
     716        start {
     717            set widget $itk_component(download)
     718            if {[llength $args] > 0} {
     719                set widget [lindex $args 0]
     720                if {[catch {winfo class $widget}]} {
     721                    set widget $itk_component(download)
     722                }
     723            }
     724            #
     725            # See if this download has any controls.  If so, then
     726            # post them now and let the user continue the download
     727            # after selecting a file format.
     728            #
     729            if {$page != ""} {
     730                set ext ""
     731                set f [$itk_component(resultpages) page $page]
     732                set arg [itcl::code $this download now $widget]
     733                set popup [$f.rviewer download controls $arg]
     734                if {"" != $popup} {
     735                    $popup activate $widget below
     736                } else {
     737                    download now $widget
     738                }
     739            } else {
     740                # this shouldn't happen
     741                set file error.html
     742                set data "<h1>Not Found</h1>There is no result selected."
     743            }
     744        }
     745        now {
     746            set widget $itk_component(download)
     747            if {[llength $args] > 0} {
     748                set widget [lindex $args 0]
     749                if {[catch {winfo class $widget}]} {
     750                    set widget $itk_component(download)
     751                }
     752            }
     753            #
     754            # Perform the actual download.
     755            #
     756            if {$page != ""} {
     757                set ext ""
     758                set f [$itk_component(resultpages) page $page]
     759                set item [$itk_component(resultselector) value]
     760                set result [$f.rviewer download now $widget $_appName $item]
     761                if { $result == "" } {
     762                    return;             # User cancelled the download.
     763                }
     764                foreach {ext data} $result break
     765                if {"" == $ext} {
     766                    if {"" != $widget} {
     767                        Rappture::Tooltip::cue $widget \
     768                            "Can't download this result."
     769                    }
     770                    return
     771                }
     772                regsub -all {[\ -\/\:-\@\{-\~]} $title {} title
     773                set file "$title$ext"
     774            } else {
     775                # this shouldn't happen
     776                set file error.html
     777                set data "<h1>Not Found</h1>There is no result selected."
     778            }
     779
     780            set mesg [Rappture::filexfer::download $data $file]
     781            if {[string length $mesg] > 0} {
     782                Rappture::Tooltip::cue $widget $mesg
     783            }
     784        }
     785        default {
     786            error "bad option \"$option\": should be coming, controls, now, start"
     787        }
    788788    }
    789789}
     
    802802    set page [$itk_component(resultselector) translate $page]
    803803    if {"" != $page} {
    804         set f [$itk_component(resultpages) page $page]
    805         $f.rviewer plot clear
    806         foreach {index opts} $_plotlist {
    807             $f.rviewer plot add $index $opts
    808         }
     804        set f [$itk_component(resultpages) page $page]
     805        $f.rviewer plot clear
     806        foreach {index opts} $_plotlist {
     807            $f.rviewer plot add $index $opts
     808        }
    809809    }
    810810}
     
    821821    set max [llength $comps]
    822822    while {$i < $max} {
    823         set c [lindex $comps $i]
    824         if {[string match log* $c]} {
    825             set comps [lreplace $comps $i $i]
    826             lappend comps $c
    827             incr max -1
    828         } else {
    829             incr i
    830         }
     823        set c [lindex $comps $i]
     824        if {[string match log* $c]} {
     825            set comps [lreplace $comps $i $i]
     826            lappend comps $c
     827            incr max -1
     828        } else {
     829            incr i
     830        }
    831831    }
    832832    return $comps
     
    852852    set label [$xmlobj get $path.about.label]
    853853    if {"" == $label} {
    854         # no label -- make one up using the title specified
    855         if {![info exists counters($group-$title)]} {
    856             set counters($group-$title) 1
    857             set label $title
    858         } else {
    859             set label "$title (#[incr counters($group-$title)])"
    860         }
    861         $xmlobj put $path.about.label $label
     854        # no label -- make one up using the title specified
     855        if {![info exists counters($group-$title)]} {
     856            set counters($group-$title) 1
     857            set label $title
     858        } else {
     859            set label "$title (#[incr counters($group-$title)])"
     860        }
     861        $xmlobj put $path.about.label $label
    862862    } else {
    863         # handle the case of two identical labels in <output>
    864         if {![info exists counters($group-$label)]} {
    865             set counters($group-$label) 1
    866         } else {
    867             set label "$label (#[incr counters($group-$label)])"
    868             $xmlobj put $path.about.label $label
    869         }
     863        # handle the case of two identical labels in <output>
     864        if {![info exists counters($group-$label)]} {
     865            set counters($group-$label) 1
     866        } else {
     867            set label "$label (#[incr counters($group-$label)])"
     868            $xmlobj put $path.about.label $label
     869        }
    870870    }
    871871    return $label
     
    882882    set page ""
    883883    if {"" != $name} {
    884         set page [$itk_component(resultselector) translate $name]
     884        set page [$itk_component(resultselector) translate $name]
    885885    }
    886886    if {$page == "@download"} {
    887         # put the combobox back to its last value
    888         $itk_component(resultselector) component entry configure -state normal
    889         $itk_component(resultselector) component entry delete 0 end
    890         $itk_component(resultselector) component entry insert end $_lastlabel
    891         $itk_component(resultselector) component entry configure -state disabled
    892         # perform the actual download
    893         download start $itk_component(download)
     887        # put the combobox back to its last value
     888        $itk_component(resultselector) component entry configure -state normal
     889        $itk_component(resultselector) component entry delete 0 end
     890        $itk_component(resultselector) component entry insert end $_lastlabel
     891        $itk_component(resultselector) component entry configure -state disabled
     892        # perform the actual download
     893        download start $itk_component(download)
    894894    } elseif {$page == "---"} {
    895         # put the combobox back to its last value
    896         $itk_component(resultselector) component entry configure -state normal
    897         $itk_component(resultselector) component entry delete 0 end
    898         $itk_component(resultselector) component entry insert end $_lastlabel
    899         $itk_component(resultselector) component entry configure -state disabled
     895        # put the combobox back to its last value
     896        $itk_component(resultselector) component entry configure -state normal
     897        $itk_component(resultselector) component entry delete 0 end
     898        $itk_component(resultselector) component entry insert end $_lastlabel
     899        $itk_component(resultselector) component entry configure -state disabled
    900900    } elseif {$page != ""} {
    901         set _lastlabel $name
    902         set win [winfo toplevel $itk_component(hull)]
    903         blt::busy hold $win
    904         $itk_component(resultpages) current $page
    905 
    906         set f [$itk_component(resultpages) page $page]
    907         $f.rviewer plot clear
    908         eval $f.rviewer plot add $_plotlist
    909         blt::busy release [winfo toplevel $itk_component(hull)]
     901        set _lastlabel $name
     902        set win [winfo toplevel $itk_component(hull)]
     903        blt::busy hold $win
     904        $itk_component(resultpages) current $page
     905
     906        set f [$itk_component(resultpages) page $page]
     907        $f.rviewer plot clear
     908        eval $f.rviewer plot add $_plotlist
     909        blt::busy release [winfo toplevel $itk_component(hull)]
    910910    }
    911911}
     
    925925
    926926    if {$frac < 0.4} {
    927         $itk_component(results) fraction end $frac
     927        $itk_component(results) fraction end $frac
    928928    }
    929929    _fixSimControl
     
    944944itcl::body Rappture::Analyzer::_simState {state args} {
    945945    if {$state} {
    946         $itk_interior.simol configure \
    947             -background $itk_option(-simcontrolactiveoutline)
    948         configure -simcontrolcolor $itk_option(-simcontrolactivebackground)
    949 
    950         $itk_component(abort) configure -state disabled
    951         $itk_component(simulate) configure -state normal \
    952             -command [itcl::code $this simulate]
    953 
    954         #
    955         # If there's a special message, then put it up next to the button.
    956         #
    957         set mesg [lindex $args 0]
    958         if {"" != $mesg} {
    959             $itk_component(simstatus) configure -state normal
    960             $itk_component(simstatus) delete 1.0 end
    961             $itk_component(simstatus) insert end $mesg
    962 
    963             #
    964             # If there are any settings, then install them in the
    965             # "Simulate" button.  Also, pop them up as a tooltip
    966             # for the message.
    967             #
    968             set settings [lindex $args 1]
    969             if {[llength $settings] > 0} {
    970                 $itk_component(simulate) configure \
    971                     -command [eval itcl::code $this simulate $settings]
    972 
    973                 set details ""
    974                 foreach {path val} $settings {
    975                     set str [$_tool xml get $path.about.label]
    976                     if {"" == $str} {
     946        $itk_interior.simol configure \
     947            -background $itk_option(-simcontrolactiveoutline)
     948        configure -simcontrolcolor $itk_option(-simcontrolactivebackground)
     949
     950        $itk_component(abort) configure -state disabled
     951        $itk_component(simulate) configure -state normal \
     952            -command [itcl::code $this simulate]
     953
     954        #
     955        # If there's a special message, then put it up next to the button.
     956        #
     957        set mesg [lindex $args 0]
     958        if {"" != $mesg} {
     959            $itk_component(simstatus) configure -state normal
     960            $itk_component(simstatus) delete 1.0 end
     961            $itk_component(simstatus) insert end $mesg
     962
     963            #
     964            # If there are any settings, then install them in the
     965            # "Simulate" button.  Also, pop them up as a tooltip
     966            # for the message.
     967            #
     968            set settings [lindex $args 1]
     969            if {[llength $settings] > 0} {
     970                $itk_component(simulate) configure \
     971                    -command [eval itcl::code $this simulate $settings]
     972
     973                set details ""
     974                foreach {path val} $settings {
     975                    set str [$_tool xml get $path.about.label]
     976                    if {"" == $str} {
    9779771                       set str [$_tool xml element -as id $path]
    978                     }
    979                     append details "$str = $val\n"
    980                 }
    981                 set details [string trim $details]
    982 
    983                 Rappture::Tooltip::for $itk_component(simstatus) $details
    984                 $itk_component(simstatus) insert end " "
    985                 $itk_component(simstatus) insert end "(details...)" popup
    986             }
    987             $itk_component(simstatus) configure -state disabled
    988         }
     978                    }
     979                    append details "$str = $val\n"
     980                }
     981                set details [string trim $details]
     982
     983                Rappture::Tooltip::for $itk_component(simstatus) $details
     984                $itk_component(simstatus) insert end " "
     985                $itk_component(simstatus) insert end "(details...)" popup
     986            }
     987            $itk_component(simstatus) configure -state disabled
     988        }
    989989    } else {
    990         if {"" != $itk_option(-simcontrolbackground)} {
    991             set simcbg $itk_option(-simcontrolbackground)
    992         } else {
    993             set simcbg $itk_option(-background)
    994         }
    995         $itk_interior.simol configure \
    996             -background $itk_option(-simcontroloutline)
    997         configure -simcontrolcolor $simcbg
    998 
    999         $itk_component(simulate) configure -state disabled
    1000         $itk_component(abort) configure -state normal
    1001 
    1002         $itk_component(simstatus) configure -state normal
    1003         $itk_component(simstatus) delete 1.0 end
    1004         set mesg [lindex $args 0]
    1005         if {"" != $mesg} {
    1006             $itk_component(simstatus) insert end $mesg
    1007         }
    1008         $itk_component(simstatus) configure -state disabled
     990        if {"" != $itk_option(-simcontrolbackground)} {
     991            set simcbg $itk_option(-simcontrolbackground)
     992        } else {
     993            set simcbg $itk_option(-background)
     994        }
     995        $itk_interior.simol configure \
     996            -background $itk_option(-simcontroloutline)
     997        configure -simcontrolcolor $simcbg
     998
     999        $itk_component(simulate) configure -state disabled
     1000        $itk_component(abort) configure -state normal
     1001
     1002        $itk_component(simstatus) configure -state normal
     1003        $itk_component(simstatus) delete 1.0 end
     1004        set mesg [lindex $args 0]
     1005        if {"" != $mesg} {
     1006            $itk_component(simstatus) insert end $mesg
     1007        }
     1008        $itk_component(simstatus) configure -state disabled
    10091009    }
    10101010}
     
    10261026    #
    10271027    while {[regexp -indices \
    1028                {=RAPPTURE-PROGRESS=> *([-+]?[0-9]+) +([^\n]*)(\n|$)} $message \
    1029                 match percent mesg]} {
    1030 
    1031         foreach {i0 i1} $percent break
    1032         set percent [string range $message $i0 $i1]
    1033 
    1034         foreach {i0 i1} $mesg break
    1035         set mesg [string range $message $i0 $i1]
    1036 
    1037         pack $itk_component(progress) -fill x -padx 10 -pady 10
    1038         $itk_component(progress) settings -percent $percent -message $mesg
    1039 
    1040         foreach {i0 i1} $match break
    1041         set message [string replace $message $i0 $i1]
     1028               {=RAPPTURE-PROGRESS=> *([-+]?[0-9]+) +([^\n]*)(\n|$)} $message \
     1029                match percent mesg]} {
     1030
     1031        foreach {i0 i1} $percent break
     1032        set percent [string range $message $i0 $i1]
     1033
     1034        foreach {i0 i1} $mesg break
     1035        set mesg [string range $message $i0 $i1]
     1036
     1037        pack $itk_component(progress) -fill x -padx 10 -pady 10
     1038        $itk_component(progress) settings -percent $percent -message $mesg
     1039
     1040        foreach {i0 i1} $match break
     1041        set message [string replace $message $i0 $i1]
    10421042    }
    10431043
     
    10491049
    10501050    while {[regexp -indices \
    1051                {=RAPPTURE-([a-zA-Z]+)=>([^\n]*)(\n|$)} $message \
    1052                 match type mesg]} {
    1053 
    1054         foreach {i0 i1} $match break
    1055         set first [string range $message 0 [expr {$i0-1}]]
    1056         if {[string length $first] > 0} {
    1057             $itk_component(runinfo) insert end $first
    1058             $itk_component(runinfo) insert end \n
    1059         }
    1060 
    1061         foreach {t0 t1} $type break
    1062         set type [string range $message $t0 $t1]
    1063         foreach {m0 m1} $mesg break
    1064         set mesg [string range $message $m0 $m1]
    1065         if {[string length $mesg] > 0 && $type != "RUN"} {
    1066             $itk_component(runinfo) insert end $mesg $type
    1067             $itk_component(runinfo) insert end \n $type
    1068         }
    1069 
    1070         set message [string range $message [expr {$i1+1}] end]
     1051               {=RAPPTURE-([a-zA-Z]+)=>([^\n]*)(\n|$)} $message \
     1052                match type mesg]} {
     1053
     1054        foreach {i0 i1} $match break
     1055        set first [string range $message 0 [expr {$i0-1}]]
     1056        if {[string length $first] > 0} {
     1057            $itk_component(runinfo) insert end $first
     1058            $itk_component(runinfo) insert end \n
     1059        }
     1060
     1061        foreach {t0 t1} $type break
     1062        set type [string range $message $t0 $t1]
     1063        foreach {m0 m1} $mesg break
     1064        set mesg [string range $message $m0 $m1]
     1065        if {[string length $mesg] > 0 && $type != "RUN"} {
     1066            $itk_component(runinfo) insert end $mesg $type
     1067            $itk_component(runinfo) insert end \n $type
     1068        }
     1069
     1070        set message [string range $message [expr {$i1+1}] end]
    10711071    }
    10721072
    10731073    if {[string length $message] > 0} {
    1074         $itk_component(runinfo) insert end $message
    1075         if {[$itk_component(runinfo) get end-2char] != "\n"} {
    1076             $itk_component(runinfo) insert end "\n"
    1077         }
    1078         $itk_component(runinfo) see end
     1074        $itk_component(runinfo) insert end $message
     1075        if {[$itk_component(runinfo) get end-2char] != "\n"} {
     1076            $itk_component(runinfo) insert end "\n"
     1077        }
     1078        $itk_component(runinfo) see end
    10791079    }
    10801080    $itk_component(runinfo) configure -state disabled
     
    10941094    set name [$itk_component(resultselector) value]
    10951095    if {[info exists _label2desc($name)] &&
    1096         [string length $_label2desc($name)] > 0} {
    1097         append tip "$_label2desc($name)\n\n"
     1096        [string length $_label2desc($name)] > 0} {
     1097        append tip "$_label2desc($name)\n\n"
    10981098    }
    10991099    if {[array size _label2page] > 1} {
    1100         append tip "Use this control to display other output results."
     1100        append tip "Use this control to display other output results."
    11011101    }
    11021102    return $tip
     
    11121112itcl::body Rappture::Analyzer::_fixSimControl {} {
    11131113    switch -- $itk_option(-simcontrol) {
    1114         on {
    1115             pack $itk_interior.simol -fill x -before $itk_interior.nb
    1116         }
    1117         off {
    1118             pack forget $itk_interior.simol
    1119         }
    1120         auto {
    1121             #
    1122             # If we have two or more radiodials, then there is a
    1123             # chance of encountering a combination of parameters
    1124             # with no data, requiring simulation.
    1125             #
    1126             if {[$itk_component(resultset) size -controls] >= 2} {
    1127                 pack $itk_interior.simol -fill x -before $itk_interior.nb
    1128             } else {
    1129                 pack forget $itk_interior.simol
    1130             }
    1131         }
    1132         default {
    1133             error "bad value \"$itk_option(-simcontrol)\": should be on, off, auto"
    1134         }
     1114        on {
     1115            pack $itk_interior.simol -fill x -before $itk_interior.nb
     1116        }
     1117        off {
     1118            pack forget $itk_interior.simol
     1119        }
     1120        auto {
     1121            #
     1122            # If we have two or more radiodials, then there is a
     1123            # chance of encountering a combination of parameters
     1124            # with no data, requiring simulation.
     1125            #
     1126            if {[$itk_component(resultset) size -controls] >= 2} {
     1127                pack $itk_interior.simol -fill x -before $itk_interior.nb
     1128            } else {
     1129                pack forget $itk_interior.simol
     1130            }
     1131        }
     1132        default {
     1133            error "bad value \"$itk_option(-simcontrol)\": should be on, off, auto"
     1134        }
    11351135    }
    11361136}
     
    11661166itcl::body Rappture::Analyzer::_isPdbTrajectory {data} {
    11671167    if { [llength $data]  == 0 } {
    1168         return 0
     1168        return 0
    11691169    }
    11701170    set nModels 0
    11711171    foreach line $data {
    1172         if { [string match "MODEL*" $line] }  {
    1173             incr nModels
    1174             if { $nModels > 1 } {
    1175                 # Stop if more than one model found.  No need to count them
    1176                 # all.
    1177                 return 1
    1178             }
    1179         }
     1172        if { [string match "MODEL*" $line] }  {
     1173            incr nModels
     1174            if { $nModels > 1 } {
     1175                # Stop if more than one model found.  No need to count them
     1176                # all.
     1177                return 1
     1178            }
     1179        }
    11801180    }
    11811181    return 0
     
    11901190itcl::body Rappture::Analyzer::_isLammpsTrajectory { data } {
    11911191    if { [llength $data]  == 0 } {
    1192         return 0
     1192        return 0
    11931193    }
    11941194    set nModels 0
    11951195    foreach line $data {
    1196         if { [regexp {^[\t ]*ITEM:[ \t]+TIMESTEP} $line] } {
    1197             incr nModels
    1198             if { $nModels > 1 } {
    1199                 # Stop if more than one model found.  No need to count them
    1200                 # all.
    1201                 return 1
    1202             }
    1203         }
     1196        if { [regexp {^[\t ]*ITEM:[ \t]+TIMESTEP} $line] } {
     1197            incr nModels
     1198            if { $nModels > 1 } {
     1199                # Stop if more than one model found.  No need to count them
     1200                # all.
     1201                return 1
     1202            }
     1203        }
    12041204    }
    12051205    return 0
     
    12311231    set numLines [llength $data]
    12321232    for { set i 0 } { $i < $numLines } { incr i } {
    1233         set line [lindex $data $i]
    1234         set line [string trim $line]
    1235         set contents {}
    1236         if { [string match "MODEL*" $line] } {
    1237             # Save the contents until we get an ENDMDL record.
    1238             for {} { $i < $numLines } { incr i } {
    1239                 set line [lindex $data $i]
    1240                 set line [string trim $line]
    1241                 if { $line == "" } {
    1242                     continue;           # Skip blank lines.
    1243                 }
    1244                 if { [string match "ENDMDL*" $line] } {
    1245                     break;
    1246                 }
    1247                 append contents $line\n
    1248             }
    1249             set frame ${sequence}.element($frameNum)
    1250             $xmlobj put ${frame}.index $frameNum
    1251            
    1252             set molecule ${frame}.structure.components.molecule
    1253             $xmlobj put ${molecule}.pdb $contents
    1254             $xmlobj put ${molecule}.formula $formula
    1255             incr frameNum
    1256         }
     1233        set line [lindex $data $i]
     1234        set line [string trim $line]
     1235        set contents {}
     1236        if { [string match "MODEL*" $line] } {
     1237            # Save the contents until we get an ENDMDL record.
     1238            for {} { $i < $numLines } { incr i } {
     1239                set line [lindex $data $i]
     1240                set line [string trim $line]
     1241                if { $line == "" } {
     1242                    continue;           # Skip blank lines.
     1243                }
     1244                if { [string match "ENDMDL*" $line] } {
     1245                    break;
     1246                }
     1247                append contents $line\n
     1248            }
     1249            set frame ${sequence}.element($frameNum)
     1250            $xmlobj put ${frame}.index $frameNum
     1251           
     1252            set molecule ${frame}.structure.components.molecule
     1253            $xmlobj put ${molecule}.pdb $contents
     1254            $xmlobj put ${molecule}.formula $formula
     1255            incr frameNum
     1256        }
    12571257    }
    12581258}
     
    12841284    set inModel 0
    12851285    foreach line $data {
    1286         set line [string trim $line]
    1287         if { $line == "" } {
    1288             continue;                   # Skip blank lines
    1289         }
    1290         if {[regexp {^[\t ]*ITEM:[ \t]+ATOMS} $line] } {
    1291             if { $inModel && $frameContents != "" } {
    1292                 set frame ${sequence}.element($frameNum)
    1293                 $xmlobj put ${frame}.index $frameNum
    1294                
    1295                 set molecule ${frame}.structure.components.molecule
    1296                 $xmlobj put ${molecule}.lammps $frameContents
    1297                 $xmlobj put ${molecule}.lammpstypemap $typemap
    1298                
    1299                 incr frameNum
    1300                 set frameContents ""
    1301             }
    1302             set inModel 1
    1303         } elseif { [scan $line "%d %d %f %f %f" a b c d e] == 5 } {
    1304             if { !$inModel } {
    1305                 puts stderr "found \"$line\" without previous \"ITEM: ATOMS\""
    1306                 set inModel 1
    1307             }
    1308             append frameContents $line\n
    1309         }
     1286        set line [string trim $line]
     1287        if { $line == "" } {
     1288            continue;                   # Skip blank lines
     1289        }
     1290        if {[regexp {^[\t ]*ITEM:[ \t]+ATOMS} $line] } {
     1291            if { $inModel && $frameContents != "" } {
     1292                set frame ${sequence}.element($frameNum)
     1293                $xmlobj put ${frame}.index $frameNum
     1294               
     1295                set molecule ${frame}.structure.components.molecule
     1296                $xmlobj put ${molecule}.lammps $frameContents
     1297                $xmlobj put ${molecule}.lammpstypemap $typemap
     1298               
     1299                incr frameNum
     1300                set frameContents ""
     1301            }
     1302            set inModel 1
     1303        } elseif { [scan $line "%d %d %f %f %f" a b c d e] == 5 } {
     1304            if { !$inModel } {
     1305                puts stderr "found \"$line\" without previous \"ITEM: ATOMS\""
     1306                set inModel 1
     1307            }
     1308            append frameContents $line\n
     1309        }
    13101310    }
    13111311    if { $frameContents != "" } {
    1312         set frame ${sequence}.element($frameNum)
    1313         $xmlobj put ${frame}.index $frameNum
    1314        
    1315         set molecule ${frame}.structure.components.molecule
    1316         $xmlobj put ${molecule}.lammps $frameContents
    1317         $xmlobj put ${molecule}.lammpstypemap $typemap
     1312        set frame ${sequence}.element($frameNum)
     1313        $xmlobj put ${frame}.index $frameNum
     1314       
     1315        set molecule ${frame}.structure.components.molecule
     1316        $xmlobj put ${molecule}.lammps $frameContents
     1317        $xmlobj put ${molecule}.lammpstypemap $typemap
    13181318    }
    13191319}
     
    13331333    # Remove leading dot from path, if present.
    13341334    if { [string index $path 0] == "." } {
    1335         set path [string range $path 1 end]
     1335        set path [string range $path 1 end]
    13361336    }
    13371337    # Otherwise check each child.
    13381338    foreach child [$xmlobj children $path] {
    1339         set current ${path}.${child}
    1340         if { [string match "structure*" $child] } {
    1341             set isTraj [$xmlobj get ${current}.components.molecule.trajectory]
    1342             if { $isTraj == "" || !$isTraj } {
    1343                 continue;               # Not a trajectory.
    1344             }
    1345             # Look for trajectory if molecule element found.  Check both pdb
    1346             # data and lammps data.
    1347             set type [$xmlobj element -as type $current]
    1348             set id   [$xmlobj element -as id $current]
    1349             set pdbdata    [$xmlobj get ${current}.components.molecule.pdb]
    1350             set lammpsdata [$xmlobj get ${current}.components.molecule.lammps]
    1351             if { $pdbdata != "" && $lammpsdata != "" } {
    1352                 puts stderr \
    1353                     "found both <pdb> and <lammps> elements: picking pdb"
    1354             }
    1355             set pdbdata [split $pdbdata \n]
    1356             set lammpsdata [split $lammpsdata \n]
    1357             if { [_isPdbTrajectory $pdbdata] } {
    1358                 _pdbToSequence $xmlobj $path $id $current $pdbdata
    1359             } elseif { [_isLammpsTrajectory $lammpsdata] } {
    1360                 _lammpsToSequence $xmlobj $path $id $current $lammpsdata
    1361             }
    1362             continue
    1363         }
    1364         if 0 {
    1365         # Recurse over all child nodes.
    1366         _trajToSequence $xmlobj $current
    1367         }
     1339        set current ${path}.${child}
     1340        if { [string match "structure*" $child] } {
     1341            set isTraj [$xmlobj get ${current}.components.molecule.trajectory]
     1342            if { $isTraj == "" || !$isTraj } {
     1343                continue;               # Not a trajectory.
     1344            }
     1345            # Look for trajectory if molecule element found.  Check both pdb
     1346            # data and lammps data.
     1347            set type [$xmlobj element -as type $current]
     1348            set id   [$xmlobj element -as id $current]
     1349            set pdbdata    [$xmlobj get ${current}.components.molecule.pdb]
     1350            set lammpsdata [$xmlobj get ${current}.components.molecule.lammps]
     1351            if { $pdbdata != "" && $lammpsdata != "" } {
     1352                puts stderr \
     1353                    "found both <pdb> and <lammps> elements: picking pdb"
     1354            }
     1355            set pdbdata [split $pdbdata \n]
     1356            set lammpsdata [split $lammpsdata \n]
     1357            if { [_isPdbTrajectory $pdbdata] } {
     1358                _pdbToSequence $xmlobj $path $id $current $pdbdata
     1359            } elseif { [_isLammpsTrajectory $lammpsdata] } {
     1360                _lammpsToSequence $xmlobj $path $id $current $lammpsdata
     1361            }
     1362            continue
     1363        }
     1364        if 0 {
     1365        # Recurse over all child nodes.
     1366        _trajToSequence $xmlobj $current
     1367        }
    13681368    }
    13691369}
  • branches/blt4/gui/scripts/animicon.tcl

    r1342 r1923  
    4545itcl::body Rappture::Animicon::constructor {args} {
    4646    itk_component add icon {
    47         label $itk_interior.icon
     47        label $itk_interior.icon
    4848    }
    4949    pack $itk_component(icon) -expand yes -fill both
     
    6161itcl::body Rappture::Animicon::start {} {
    6262    if {![isrunning]} {
    63         _next
     63        _next
    6464    }
    6565}
     
    7474itcl::body Rappture::Animicon::stop {} {
    7575    if {[isrunning]} {
    76         after cancel $_afterid
    77         set _afterid ""
     76        after cancel $_afterid
     77        set _afterid ""
    7878    }
    7979}
     
    9797    $itk_component(icon) configure -image $_frames($_pos)
    9898    if {[incr _pos] >= [array size _frames]} {
    99         set _pos 0
     99        set _pos 0
    100100    }
    101101    set _afterid [after $itk_option(-delay) [itcl::code $this _next]]
     
    113113    catch {unset _frames}
    114114    if {[llength $itk_option(-images)] >= 1} {
    115         set w 0
    116         set h 0
    117         set i 0
    118         foreach name $itk_option(-images) {
    119             set imh [Rappture::icon $name]
    120             if {"" == $imh} {
    121                 error "image not found: $name"
    122             }
    123             set _frames($i) $imh
    124             if {[image width $imh] > $w} { set w [image width $imh] }
    125             if {[image height $imh] > $h} { set h [image height $imh] }
    126             incr i
    127         }
     115        set w 0
     116        set h 0
     117        set i 0
     118        foreach name $itk_option(-images) {
     119            set imh [Rappture::icon $name]
     120            if {"" == $imh} {
     121                error "image not found: $name"
     122            }
     123            set _frames($i) $imh
     124            if {[image width $imh] > $w} { set w [image width $imh] }
     125            if {[image height $imh] > $h} { set h [image height $imh] }
     126            incr i
     127        }
    128128    }
    129129
     
    132132
    133133    if {$restart} {
    134         start
     134        start
    135135    }
    136136}
  • branches/blt4/gui/scripts/animover.tcl

    r1646 r1923  
    3131
    3232    constructor {args} { # defined below }
    33                                                                                
     33                                                                               
    3434    protected method _redraw {}
    3535    protected variable _x0 0   ;# min value for middle image
     
    4646    private common images
    4747    set images(bgl) [image create picture -file \
    48         [file join $dir images bgl.gif]]
     48        [file join $dir images bgl.gif]]
    4949    set images(bgr) [image create picture -file \
    50         [file join $dir images bgr.gif]]
    51 }
    52                                                                                
     50        [file join $dir images bgr.gif]]
     51}
     52                                                                               
    5353itk::usual Animover {
    5454}
     
    5959itcl::body Rappture::Animover::constructor {args} {
    6060    itk_component add area {
    61         canvas $itk_interior.area \
    62             -height [expr {[image height $images(bgl)]+4}]
     61        canvas $itk_interior.area \
     62            -height [expr {[image height $images(bgl)]+4}]
    6363    } {
    64         usual
    65         keep -width
     64        usual
     65        keep -width
    6666    }
    6767    pack $itk_component(area) -expand yes -fill both
     
    9595    set midw 0
    9696    if {$itk_option(-middleimage) != ""} {
    97         set midw [expr {[image width $itk_option(-middleimage)]/2}]
     97        set midw [expr {[image width $itk_option(-middleimage)]/2}]
    9898    }
    9999
    100100    if {$itk_option(-leftimage) != ""} {
    101         $c create image 4 $hmid -anchor w \
    102             -image $itk_option(-leftimage)
    103         set _x0 [expr {4+[image width $itk_option(-leftimage)]+$midw}]
     101        $c create image 4 $hmid -anchor w \
     102            -image $itk_option(-leftimage)
     103        set _x0 [expr {4+[image width $itk_option(-leftimage)]+$midw}]
    104104    } else {
    105         set _x0 [expr {4+$midw}]
     105        set _x0 [expr {4+$midw}]
    106106    }
    107107    if {$_x0 < 0} { set _x0 0 }
    108108
    109109    if {$itk_option(-rightimage) != ""} {
    110         $c create image [expr {$w-4}] $hmid -anchor e \
    111             -image $itk_option(-rightimage)
    112         set _x1 [expr {$w-4-[image width $itk_option(-rightimage)]-$midw}]
     110        $c create image [expr {$w-4}] $hmid -anchor e \
     111            -image $itk_option(-rightimage)
     112        set _x1 [expr {$w-4-[image width $itk_option(-rightimage)]-$midw}]
    113113    } else {
    114         set _x1 [expr {$w-4-$midw}]
     114        set _x1 [expr {$w-4-$midw}]
    115115    }
    116116
    117117    if {$_x >= 0} {
    118         if {$_x < $_x0} {
    119             set _x $_x0
    120         } elseif {$_x > $_x1} {
    121             set _x $_x1
    122         }
    123         if {$itk_option(-middleimage) != ""} {
    124             $c create image $_x $hmid -anchor c \
    125                 -image $itk_option(-middleimage) -tags middle
    126         }
     118        if {$_x < $_x0} {
     119            set _x $_x0
     120        } elseif {$_x > $_x1} {
     121            set _x $_x1
     122        }
     123        if {$itk_option(-middleimage) != ""} {
     124            $c create image $_x $hmid -anchor c \
     125                -image $itk_option(-middleimage) -tags middle
     126        }
    127127    }
    128128}
     
    138138itcl::body Rappture::Animover::_animate {} {
    139139    if {$_x >= 0 && $_x0 < $_x1} {
    140         if {$_x+$_dx <= $_x0} {
    141             if {$itk_option(-direction) == "left"} {
    142                 set _x $_x1
    143             } elseif {$itk_option(-direction) == "both"} {
    144                 set _dx [expr {-$_dx}]
    145                 set _x [expr {$_x+$_dx}]
    146             }
    147         } elseif {$_x+$_dx >= $_x1} {
    148             if {$itk_option(-direction) == "right"} {
    149                 set _x $_x0
    150             } elseif {$itk_option(-direction) == "both"} {
    151                 set _dx [expr {-$_dx}]
    152                 set _x [expr {$_x+$_dx}]
    153             }
    154         } else {
    155             set _x [expr {$_x+$_dx}]
    156         }
    157 
    158         set c $itk_component(area)
    159         set h [winfo height $c]
    160         set hmid [expr {$h/2}]
    161 
    162         if {[$c find withtag middle] == ""} {
    163             $c create image $_x $hmid -anchor c \
    164                 -image $itk_option(-middleimage) -tags middle
    165         } else {
    166             $c coords middle $_x $hmid
    167         }
     140        if {$_x+$_dx <= $_x0} {
     141            if {$itk_option(-direction) == "left"} {
     142                set _x $_x1
     143            } elseif {$itk_option(-direction) == "both"} {
     144                set _dx [expr {-$_dx}]
     145                set _x [expr {$_x+$_dx}]
     146            }
     147        } elseif {$_x+$_dx >= $_x1} {
     148            if {$itk_option(-direction) == "right"} {
     149                set _x $_x0
     150            } elseif {$itk_option(-direction) == "both"} {
     151                set _dx [expr {-$_dx}]
     152                set _x [expr {$_x+$_dx}]
     153            }
     154        } else {
     155            set _x [expr {$_x+$_dx}]
     156        }
     157
     158        set c $itk_component(area)
     159        set h [winfo height $c]
     160        set hmid [expr {$h/2}]
     161
     162        if {[$c find withtag middle] == ""} {
     163            $c create image $_x $hmid -anchor c \
     164                -image $itk_option(-middleimage) -tags middle
     165        } else {
     166            $c coords middle $_x $hmid
     167        }
    168168    }
    169169    if {$_x >= 0} {
    170         after $itk_option(-delay) [itcl::code $this _animate]
     170        after $itk_option(-delay) [itcl::code $this _animate]
    171171    }
    172172}
     
    178178itcl::configbody Rappture::Animover::running {
    179179    switch -- $itk_option(-running) {
    180         normal {
    181             if {$_x < 0} {
    182                 set _x $_x0
    183                 after idle [itcl::code $this _animate]
    184             }
    185         }
    186         disabled {
    187             if {$_x > 0} {
    188                 set _x -1
    189                 after cancel [itcl::code $this _animate]
    190                 $itk_component(area) delete middle
    191             }
    192         }
    193         default {
    194             error "bad value \"$itk_option(-running)\": should be normal or disabled"
    195         }
     180        normal {
     181            if {$_x < 0} {
     182                set _x $_x0
     183                after idle [itcl::code $this _animate]
     184            }
     185        }
     186        disabled {
     187            if {$_x > 0} {
     188                set _x -1
     189                after cancel [itcl::code $this _animate]
     190                $itk_component(area) delete middle
     191            }
     192        }
     193        default {
     194            error "bad value \"$itk_option(-running)\": should be normal or disabled"
     195        }
    196196    }
    197197}
     
    203203itcl::configbody Rappture::Animover::direction {
    204204    switch -- $itk_option(-direction) {
    205         left  { set _dx [expr {-1*$itk_option(-delta)}] }
    206         right { set _dx $itk_option(-delta) }
    207         both  { set _dx $itk_option(-delta) }
    208         default {
    209             error "bad value \"$itk_option(-direction)\": should be left, right, or both"
    210         }
     205        left  { set _dx [expr {-1*$itk_option(-delta)}] }
     206        right { set _dx $itk_option(-delta) }
     207        both  { set _dx $itk_option(-delta) }
     208        default {
     209            error "bad value \"$itk_option(-direction)\": should be left, right, or both"
     210        }
    211211    }
    212212}
     
    218218itcl::configbody Rappture::Animover::delta {
    219219    if {$itk_option(-delta) < 1} {
    220         error "bad value \"$itk_option(-delta)\": should be int >= 1"
    221     }
    222 }
     220        error "bad value \"$itk_option(-delta)\": should be int >= 1"
     221    }
     222}
  • branches/blt4/gui/scripts/balloon.tcl

    r1897 r1923  
    5353
    5454    bind RapptureBalloon <ButtonPress> \
    55         {if {[Rappture::Balloon::outside %W %X %Y]} {%W deactivate}}
     55        {if {[Rappture::Balloon::outside %W %X %Y]} {%W deactivate}}
    5656}
    5757
     
    6868
    6969    itk_component add border {
    70         frame $itk_interior.border -borderwidth 2
     70        frame $itk_interior.border -borderwidth 2
    7171    } {
    72         usual
    73         keep -relief
     72        usual
     73        keep -relief
    7474    }
    7575    pack $itk_component(border) -expand yes -fill both
    7676
    7777    itk_component add titlebar {
    78         frame $itk_component(border).tbar
     78        frame $itk_component(border).tbar
    7979    } {
    80         usual
    81         rename -background -titlebackground titleBackground Background
     80        usual
     81        rename -background -titlebackground titleBackground Background
    8282    }
    8383
    8484    itk_component add title {
    85         label $itk_component(titlebar).title -width 1 -anchor w
     85        label $itk_component(titlebar).title -width 1 -anchor w
    8686    } {
    87         usual
    88         rename -background -titlebackground titleBackground Background
    89         rename -foreground -titleforeground titleForeground Foreground
    90         rename -highlightbackground -titlebackground titleBackground Background
    91         rename -text -title title Title
     87        usual
     88        rename -background -titlebackground titleBackground Background
     89        rename -foreground -titleforeground titleForeground Foreground
     90        rename -highlightbackground -titlebackground titleBackground Background
     91        rename -text -title title Title
    9292    }
    9393    pack $itk_component(title) -side left -expand yes -fill both -padx 2
    9494
    9595    itk_component add dismiss {
    96         button $itk_component(titlebar).dismiss \
    97             -bitmap [Rappture::icon dismiss] \
    98             -relief flat -overrelief raised -command "
    99               Rappture::Tooltip::cue hide
    100               [list $itk_component(hull) deactivate]
    101             "
     96        button $itk_component(titlebar).dismiss \
     97            -bitmap [Rappture::icon dismiss] \
     98            -relief flat -overrelief raised -command "
     99              Rappture::Tooltip::cue hide
     100              [list $itk_component(hull) deactivate]
     101            "
    102102    } {
    103         usual
    104         rename -background -titlebackground titleBackground Background
    105         rename -foreground -titleforeground titleForeground Foreground
    106         rename -highlightbackground -titlebackground titleBackground Background
     103        usual
     104        rename -background -titlebackground titleBackground Background
     105        rename -foreground -titleforeground titleForeground Foreground
     106        rename -highlightbackground -titlebackground titleBackground Background
    107107    }
    108108
    109109    itk_component add inner {
    110         frame $itk_component(border).inner
     110        frame $itk_component(border).inner
    111111    }
    112112    pack $itk_component(inner) -expand yes -fill both
     
    131131itcl::body Rappture::Balloon::activate {where placement} {
    132132    if {![info exists _stems($placement)]} {
    133         error "bad placement \"$placement\": should be [join [lsort [array names _stems]] {, }]"
     133        error "bad placement \"$placement\": should be [join [lsort [array names _stems]] {, }]"
    134134    }
    135135    set s $_stems($placement)
     
    141141
    142142    if {[winfo exists $where]} {
    143         set x [expr {[winfo rootx $where]+[winfo width $where]/2}]
    144         set y [expr {[winfo rooty $where]+[winfo height $where]/2}]
    145         switch -- $placement {
    146             left { set x [expr {[winfo rootx $where]+5}] }
    147             right { set x [expr {[winfo rootx $where]+[winfo width $where]-5}] }
    148             above { set y [expr {[winfo rooty $where]+5}] }
    149             below { set y [expr {[winfo rooty $where]+[winfo height $where]-5}] }
    150         }
     143        set x [expr {[winfo rootx $where]+[winfo width $where]/2}]
     144        set y [expr {[winfo rooty $where]+[winfo height $where]/2}]
     145        switch -- $placement {
     146            left { set x [expr {[winfo rootx $where]+5}] }
     147            right { set x [expr {[winfo rootx $where]+[winfo width $where]-5}] }
     148            above { set y [expr {[winfo rooty $where]+5}] }
     149            below { set y [expr {[winfo rooty $where]+[winfo height $where]-5}] }
     150        }
    151151    } elseif {[regexp {^@([0-9]+),([0-9]+)$} $where match x y]} {
    152         # got x and y
     152        # got x and y
    153153    } else {
    154         error "bad location \"$where\": should be widget or @x,y"
     154        error "bad location \"$where\": should be widget or @x,y"
    155155    }
    156156
     
    164164
    165165    switch -- $placement {
    166         left {
    167             set sx [expr {$x-$sw+3}]
    168             set sy [expr {$y-$sh/2}]
    169             set px [expr {$sx-$pw+3}]
    170             set py [expr {$y-$ph/2}]
    171 
    172             # make sure that the panel doesn't go off-screen
    173             if {$py < 0} { set py 0 }
    174             if {$py+$ph > $screenh} { set py [expr {$screenh-$ph}] }
    175             if {$px < 0} { set pw [expr {$pw+$px}]; set px 0 }
    176         }
    177         right {
    178             set sx $x
    179             set sy [expr {$y-$sh/2}]
    180             set px [expr {$x+$sw-3}]
    181             set py [expr {$y-$ph/2}]
    182 
    183             # make sure that the panel doesn't go off-screen
    184             if {$py < 0} { set py 0 }
    185             if {$py+$ph > $screenh} { set py [expr {$screenh-$ph}] }
    186             if {$px+$pw > $screenw} { set pw [expr {$screenw-$px}] }
    187         }
    188         above {
    189             set sx [expr {$x-$sw/2}]
    190             set sy [expr {$y-$sh+3}]
    191             set px [expr {$x-$pw/2}]
    192             set py [expr {$sy-$ph+3}]
    193 
    194             # make sure that the panel doesn't go off-screen
    195             if {$px < 0} { set px 0 }
    196             if {$px+$pw > $screenw} { set px [expr {$screenw-$pw}] }
    197             if {$py < 0} { set ph [expr {$ph+$py}]; set py 0 }
    198         }
    199         below {
    200             set sx [expr {$x-$sw/2}]
    201             set sy $y
    202             set px [expr {$x-$pw/2}]
    203             set py [expr {$y+$sh-3}]
    204 
    205             # make sure that the panel doesn't go off-screen
    206             if {$px < 0} { set px 0 }
    207             if {$px+$pw > $screenw} { set px [expr {$screenw-$pw}] }
    208             if {$py+$ph > $screenh} { set ph [expr {$screenh-$py}] }
    209         }
     166        left {
     167            set sx [expr {$x-$sw+3}]
     168            set sy [expr {$y-$sh/2}]
     169            set px [expr {$sx-$pw+3}]
     170            set py [expr {$y-$ph/2}]
     171
     172            # make sure that the panel doesn't go off-screen
     173            if {$py < 0} { set py 0 }
     174            if {$py+$ph > $screenh} { set py [expr {$screenh-$ph}] }
     175            if {$px < 0} { set pw [expr {$pw+$px}]; set px 0 }
     176        }
     177        right {
     178            set sx $x
     179            set sy [expr {$y-$sh/2}]
     180            set px [expr {$x+$sw-3}]
     181            set py [expr {$y-$ph/2}]
     182
     183            # make sure that the panel doesn't go off-screen
     184            if {$py < 0} { set py 0 }
     185            if {$py+$ph > $screenh} { set py [expr {$screenh-$ph}] }
     186            if {$px+$pw > $screenw} { set pw [expr {$screenw-$px}] }
     187        }
     188        above {
     189            set sx [expr {$x-$sw/2}]
     190            set sy [expr {$y-$sh+3}]
     191            set px [expr {$x-$pw/2}]
     192            set py [expr {$sy-$ph+3}]
     193
     194            # make sure that the panel doesn't go off-screen
     195            if {$px < 0} { set px 0 }
     196            if {$px+$pw > $screenw} { set px [expr {$screenw-$pw}] }
     197            if {$py < 0} { set ph [expr {$ph+$py}]; set py 0 }
     198        }
     199        below {
     200            set sx [expr {$x-$sw/2}]
     201            set sy $y
     202            set px [expr {$x-$pw/2}]
     203            set py [expr {$y+$sh-3}]
     204
     205            # make sure that the panel doesn't go off-screen
     206            if {$px < 0} { set px 0 }
     207            if {$px+$pw > $screenw} { set px [expr {$screenw-$pw}] }
     208            if {$py+$ph > $screenh} { set ph [expr {$screenh-$py}] }
     209        }
    210210    }
    211211    if {[info exists _masks($placement)]} {
    212         shape set $s -bound photo $_masks($placement)
     212        shape set $s -bound photo $_masks($placement)
    213213    }
    214214    if { $pw < 1 || $ph < 1 }  {
    215         # I really don't know why this is happenning.  I believe this occurs
    216         # when in a work space (i.e the main window is smaller than the root
    217         # window). So for now, better to place the balloon window somewhere
    218         # than to fail with a bad geometry.
    219         wm geometry $p +$px+$py
     215        # I really don't know why this is happenning.  I believe this occurs
     216        # when in a work space (i.e the main window is smaller than the root
     217        # window). So for now, better to place the balloon window somewhere
     218        # than to fail with a bad geometry.
     219        wm geometry $p +$px+$py
    220220    } else {
    221         wm geometry $p ${pw}x${ph}+$px+$py
     221        wm geometry $p ${pw}x${ph}+$px+$py
    222222    }
    223223    wm deiconify $p
     
    231231    update
    232232    while {[catch {grab set -global $itk_component(hull)}]} {
    233         after 100
     233        after 100
    234234    }
    235235    focus $itk_component(hull)
     
    243243itcl::body Rappture::Balloon::deactivate {} {
    244244    if {[string length $itk_option(-deactivatecommand)] > 0} {
    245         uplevel #0 $itk_option(-deactivatecommand)
     245        uplevel #0 $itk_option(-deactivatecommand)
    246246    }
    247247
     
    250250    wm withdraw $itk_component(hull)
    251251    foreach dir {left right above below} {
    252         wm withdraw $_stems($dir)
     252        wm withdraw $_stems($dir)
    253253    }
    254254}
     
    264264    # destroy any existing stems
    265265    foreach dir [array names _stems] {
    266         destroy $_stems($dir)
    267         unset _stems($dir)
     266        destroy $_stems($dir)
     267        unset _stems($dir)
    268268    }
    269269    foreach dir [array names _masks] {
    270         image delete $_masks($dir)
    271         unset _masks($dir)
     270        image delete $_masks($dir)
     271        unset _masks($dir)
    272272    }
    273273    foreach dir [array names _fills] {
    274         image delete $_fills($dir)
    275         unset _fills($dir)
     274        image delete $_fills($dir)
     275        unset _fills($dir)
    276276    }
    277277
    278278    if {[catch {package require Shape}] == 0} {
    279         #
    280         # We have the Shape extension.  Use it to create nice
    281         # looking (triangle-shaped) stems.
    282         #
    283         set s $itk_option(-stemlength)
    284         foreach dir {left right above below} {
    285             switch -- $dir {
    286                 left - right {
    287                     set sw [expr {$s+2}]
    288                     set sh $s
    289                 }
    290                 above - below {
    291                     set sw $s
    292                     set sh [expr {$s+2}]
    293                 }
    294             }
    295 
    296             set _stems($dir) [toplevel $itk_interior.s$dir -borderwidth 0]
    297             label $_stems($dir).l \
    298                 -width $sw -height $sh -borderwidth 0
    299             pack $_stems($dir).l -expand yes -fill both
    300 
    301             wm withdraw $_stems($dir)
    302             wm overrideredirect $_stems($dir) yes
    303 
    304             #
    305             # Draw the triangle part of the stem, with a black outline
    306             # and light/dark highlights:
    307             #
    308             #     --------  ---       LEFT STEM
    309             #    |..##    |  ^ 
    310             #    |  ..##  |  |        . = light color
    311             #    |    ..##|  | s      @ = dark color
    312             #    |    @@##|  |        # = black
    313             #    |  @@##  |  |
    314             #    |@@##    |  v
    315             #     --------  ---
    316             #    |<------>|
    317             #        s+2
    318             #
    319             set _masks($dir) [image create photo -width $sw -height $sh]
    320             set _fills($dir) [image create photo -width $sw -height $sh]
    321 
    322             set bg $itk_option(-background)
    323             set light [Rappture::color::brightness $bg 0.4]
    324             set dark [Rappture::color::brightness $bg -0.4]
    325             set rgb [winfo rgb . $bg]
    326             set bg [format "#%03x%03x%03x" [lindex $rgb 0] [lindex $rgb 1] [lindex $rgb 2]]
    327 
    328             $_fills($dir) put $bg -to 0 0 $sw $sh
    329 
    330             switch -- $dir {
    331               left {
    332                 set i 0
    333                 for {set j 0} {$j < $s/2} {incr j} {
    334                     set ybtm [expr {$s-$j-1}]
    335                     $_fills($dir) put $dark \
    336                         -to $i [expr {$ybtm-1}] [expr {$i+2}] [expr {$ybtm+1}]
    337                     $_fills($dir) put black \
    338                         -to [expr {$i+2}] $ybtm [expr {$i+4}] [expr {$ybtm+1}]
    339 
    340                     set ytop $j
    341                     set ytoffs [expr {($j == $s/2-1) ? 1 : 2}]
    342                     $_fills($dir) put $light \
    343                         -to $i $ytop [expr {$i+2}] [expr {$ytop+$ytoffs}]
    344                     $_fills($dir) put black \
    345                         -to [expr {$i+2}] $ytop [expr {$i+4}] [expr {$ytop+1}]
    346                     incr i 2
    347                 }
    348                 $_stems($dir).l configure -image $_fills($dir)
    349 
    350                 $_masks($dir) put black -to 0 0 $sw $sh
    351                 set i 0
    352                 for {set j 0} {$j < $s/2} {incr j} {
    353                     for {set k [expr {$i+4}]} {$k < $s+2} {incr k} {
    354                         $_masks($dir) transparency set $k $j yes
    355                         $_masks($dir) transparency set $k [expr {$s-$j-1}] yes
    356                     }
    357                     incr i 2
    358                 }
    359               }
    360               right {
    361                 set i $sw
    362                 for {set j 0} {$j < $s/2} {incr j} {
    363                     set ybtm [expr {$s-$j-1}]
    364                     $_fills($dir) put $dark \
    365                         -to [expr {$i-2}] [expr {$ybtm-1}] $i [expr {$ybtm+1}]
    366                     $_fills($dir) put black \
    367                         -to [expr {$i-4}] $ybtm [expr {$i-2}] [expr {$ybtm+1}]
    368 
    369                     set ytop $j
    370                     set ytoffs [expr {($j == $s/2-1) ? 1 : 2}]
    371                     $_fills($dir) put $light \
    372                         -to [expr {$i-2}] $ytop $i [expr {$ytop+$ytoffs}]
    373                     $_fills($dir) put black \
    374                         -to [expr {$i-4}] $ytop [expr {$i-2}] [expr {$ytop+1}]
    375                     incr i -2
    376                 }
    377                 $_stems($dir).l configure -image $_fills($dir)
    378 
    379                 $_masks($dir) put black -to 0 0 $sw $sh
    380                 set i $sw
    381                 for {set j 0} {$j < $s/2} {incr j} {
    382                     for {set k 0} {$k < $i-4} {incr k} {
    383                         $_masks($dir) transparency set $k $j yes
    384                         $_masks($dir) transparency set $k [expr {$s-$j-1}] yes
    385                     }
    386                     incr i -2
    387                 }
    388               }
    389               above {
    390                 set i 0
    391                 for {set j 0} {$j < $s/2} {incr j} {
    392                     set xrhs [expr {$s-$j-1}]
    393                     $_fills($dir) put $dark \
    394                         -to [expr {$xrhs-1}] $i [expr {$xrhs+1}] [expr {$i+2}]
    395                     $_fills($dir) put black \
    396                         -to $xrhs [expr {$i+2}] [expr {$xrhs+1}] [expr {$i+4}]
    397 
    398                     set xlhs $j
    399                     set xloffs [expr {($j == $s/2-1) ? 1 : 2}]
    400                     $_fills($dir) put $light \
    401                         -to $xlhs $i [expr {$xlhs+$xloffs}] [expr {$i+2}]
    402                     $_fills($dir) put black \
    403                         -to $xlhs [expr {$i+2}] [expr {$xlhs+1}] [expr {$i+4}]
    404                     incr i 2
    405                 }
    406                 $_stems($dir).l configure -image $_fills($dir)
    407 
    408                 $_masks($dir) put black -to 0 0 $sw $sh
    409                 set i 0
    410                 for {set j 0} {$j < $s/2} {incr j} {
    411                     for {set k [expr {$i+4}]} {$k < $s+2} {incr k} {
    412                         $_masks($dir) transparency set $j $k yes
    413                         $_masks($dir) transparency set [expr {$s-$j-1}] $k yes
    414                     }
    415                     incr i 2
    416                 }
    417               }
    418               below {
    419                 set i $sh
    420                 for {set j 0} {$j < $s/2} {incr j} {
    421                     set xrhs [expr {$s-$j-1}]
    422                     $_fills($dir) put $dark \
    423                         -to [expr {$xrhs-1}] [expr {$i-2}] [expr {$xrhs+1}] $i
    424                     $_fills($dir) put black \
    425                         -to $xrhs [expr {$i-4}] [expr {$xrhs+1}] [expr {$i-2}]
    426 
    427                     set xlhs $j
    428                     set xloffs [expr {($j == $s/2-1) ? 1 : 2}]
    429                     $_fills($dir) put $light \
    430                         -to $xlhs [expr {$i-2}] [expr {$xlhs+$xloffs}] $i
    431                     $_fills($dir) put black \
    432                         -to $xlhs [expr {$i-4}] [expr {$xlhs+1}] [expr {$i-2}]
    433                     incr i -2
    434                 }
    435                 $_stems($dir).l configure -image $_fills($dir)
    436 
    437                 $_masks($dir) put black -to 0 0 $sw $sh
    438                 set i $sh
    439                 for {set j 0} {$j < $s/2} {incr j} {
    440                     for {set k 0} {$k < $i-4} {incr k} {
    441                         $_masks($dir) transparency set $j $k yes
    442                         $_masks($dir) transparency set [expr {$s-$j-1}] $k yes
    443                     }
    444                     incr i -2
    445                 }
    446               }
    447             }
    448         }
     279        #
     280        # We have the Shape extension.  Use it to create nice
     281        # looking (triangle-shaped) stems.
     282        #
     283        set s $itk_option(-stemlength)
     284        foreach dir {left right above below} {
     285            switch -- $dir {
     286                left - right {
     287                    set sw [expr {$s+2}]
     288                    set sh $s
     289                }
     290                above - below {
     291                    set sw $s
     292                    set sh [expr {$s+2}]
     293                }
     294            }
     295
     296            set _stems($dir) [toplevel $itk_interior.s$dir -borderwidth 0]
     297            label $_stems($dir).l \
     298                -width $sw -height $sh -borderwidth 0
     299            pack $_stems($dir).l -expand yes -fill both
     300
     301            wm withdraw $_stems($dir)
     302            wm overrideredirect $_stems($dir) yes
     303
     304            #
     305            # Draw the triangle part of the stem, with a black outline
     306            # and light/dark highlights:
     307            #
     308            #     --------  ---       LEFT STEM
     309            #    |..##    |  ^ 
     310            #    |  ..##  |  |        . = light color
     311            #    |    ..##|  | s      @ = dark color
     312            #    |    @@##|  |        # = black
     313            #    |  @@##  |  |
     314            #    |@@##    |  v
     315            #     --------  ---
     316            #    |<------>|
     317            #        s+2
     318            #
     319            set _masks($dir) [image create photo -width $sw -height $sh]
     320            set _fills($dir) [image create photo -width $sw -height $sh]
     321
     322            set bg $itk_option(-background)
     323            set light [Rappture::color::brightness $bg 0.4]
     324            set dark [Rappture::color::brightness $bg -0.4]
     325            set rgb [winfo rgb . $bg]
     326            set bg [format "#%03x%03x%03x" [lindex $rgb 0] [lindex $rgb 1] [lindex $rgb 2]]
     327
     328            $_fills($dir) put $bg -to 0 0 $sw $sh
     329
     330            switch -- $dir {
     331              left {
     332                set i 0
     333                for {set j 0} {$j < $s/2} {incr j} {
     334                    set ybtm [expr {$s-$j-1}]
     335                    $_fills($dir) put $dark \
     336                        -to $i [expr {$ybtm-1}] [expr {$i+2}] [expr {$ybtm+1}]
     337                    $_fills($dir) put black \
     338                        -to [expr {$i+2}] $ybtm [expr {$i+4}] [expr {$ybtm+1}]
     339
     340                    set ytop $j
     341                    set ytoffs [expr {($j == $s/2-1) ? 1 : 2}]
     342                    $_fills($dir) put $light \
     343                        -to $i $ytop [expr {$i+2}] [expr {$ytop+$ytoffs}]
     344                    $_fills($dir) put black \
     345                        -to [expr {$i+2}] $ytop [expr {$i+4}] [expr {$ytop+1}]
     346                    incr i 2
     347                }
     348                $_stems($dir).l configure -image $_fills($dir)
     349
     350                $_masks($dir) put black -to 0 0 $sw $sh
     351                set i 0
     352                for {set j 0} {$j < $s/2} {incr j} {
     353                    for {set k [expr {$i+4}]} {$k < $s+2} {incr k} {
     354                        $_masks($dir) transparency set $k $j yes
     355                        $_masks($dir) transparency set $k [expr {$s-$j-1}] yes
     356                    }
     357                    incr i 2
     358                }
     359              }
     360              right {
     361                set i $sw
     362                for {set j 0} {$j < $s/2} {incr j} {
     363                    set ybtm [expr {$s-$j-1}]
     364                    $_fills($dir) put $dark \
     365                        -to [expr {$i-2}] [expr {$ybtm-1}] $i [expr {$ybtm+1}]
     366                    $_fills($dir) put black \
     367                        -to [expr {$i-4}] $ybtm [expr {$i-2}] [expr {$ybtm+1}]
     368
     369                    set ytop $j
     370                    set ytoffs [expr {($j == $s/2-1) ? 1 : 2}]
     371                    $_fills($dir) put $light \
     372                        -to [expr {$i-2}] $ytop $i [expr {$ytop+$ytoffs}]
     373                    $_fills($dir) put black \
     374                        -to [expr {$i-4}] $ytop [expr {$i-2}] [expr {$ytop+1}]
     375                    incr i -2
     376                }
     377                $_stems($dir).l configure -image $_fills($dir)
     378
     379                $_masks($dir) put black -to 0 0 $sw $sh
     380                set i $sw
     381                for {set j 0} {$j < $s/2} {incr j} {
     382                    for {set k 0} {$k < $i-4} {incr k} {
     383                        $_masks($dir) transparency set $k $j yes
     384                        $_masks($dir) transparency set $k [expr {$s-$j-1}] yes
     385                    }
     386                    incr i -2
     387                }
     388              }
     389              above {
     390                set i 0
     391                for {set j 0} {$j < $s/2} {incr j} {
     392                    set xrhs [expr {$s-$j-1}]
     393                    $_fills($dir) put $dark \
     394                        -to [expr {$xrhs-1}] $i [expr {$xrhs+1}] [expr {$i+2}]
     395                    $_fills($dir) put black \
     396                        -to $xrhs [expr {$i+2}] [expr {$xrhs+1}] [expr {$i+4}]
     397
     398                    set xlhs $j
     399                    set xloffs [expr {($j == $s/2-1) ? 1 : 2}]
     400                    $_fills($dir) put $light \
     401                        -to $xlhs $i [expr {$xlhs+$xloffs}] [expr {$i+2}]
     402                    $_fills($dir) put black \
     403                        -to $xlhs [expr {$i+2}] [expr {$xlhs+1}] [expr {$i+4}]
     404                    incr i 2
     405                }
     406                $_stems($dir).l configure -image $_fills($dir)
     407
     408                $_masks($dir) put black -to 0 0 $sw $sh
     409                set i 0
     410                for {set j 0} {$j < $s/2} {incr j} {
     411                    for {set k [expr {$i+4}]} {$k < $s+2} {incr k} {
     412                        $_masks($dir) transparency set $j $k yes
     413                        $_masks($dir) transparency set [expr {$s-$j-1}] $k yes
     414                    }
     415                    incr i 2
     416                }
     417              }
     418              below {
     419                set i $sh
     420                for {set j 0} {$j < $s/2} {incr j} {
     421                    set xrhs [expr {$s-$j-1}]
     422                    $_fills($dir) put $dark \
     423                        -to [expr {$xrhs-1}] [expr {$i-2}] [expr {$xrhs+1}] $i
     424                    $_fills($dir) put black \
     425                        -to $xrhs [expr {$i-4}] [expr {$xrhs+1}] [expr {$i-2}]
     426
     427                    set xlhs $j
     428                    set xloffs [expr {($j == $s/2-1) ? 1 : 2}]
     429                    $_fills($dir) put $light \
     430                        -to $xlhs [expr {$i-2}] [expr {$xlhs+$xloffs}] $i
     431                    $_fills($dir) put black \
     432                        -to $xlhs [expr {$i-4}] [expr {$xlhs+1}] [expr {$i-2}]
     433                    incr i -2
     434                }
     435                $_stems($dir).l configure -image $_fills($dir)
     436
     437                $_masks($dir) put black -to 0 0 $sw $sh
     438                set i $sh
     439                for {set j 0} {$j < $s/2} {incr j} {
     440                    for {set k 0} {$k < $i-4} {incr k} {
     441                        $_masks($dir) transparency set $j $k yes
     442                        $_masks($dir) transparency set [expr {$s-$j-1}] $k yes
     443                    }
     444                    incr i -2
     445                }
     446              }
     447            }
     448        }
    449449    } else {
    450         #
    451         # No shape extension.  Do the best we can by creating a
    452         # black line for all directions.
    453         #
    454         foreach {dir w h} [list \
    455             left   $itk_option(-stemlength) 3 \
    456             right  $itk_option(-stemlength) 3 \
    457             above  3 $itk_option(-stemlength) \
    458             below  3 $itk_option(-stemlength) \
    459         ] {
    460             set _stems($dir) [toplevel $itk_interior.s$dir \
    461                 -width $w -height $h \
    462                 -borderwidth 1 -relief solid -background black]
    463             wm withdraw $_stems($dir)
    464             wm overrideredirect $_stems($dir) yes
    465 
    466             # create this for size, even though we don't really use it
    467             set _fills($dir) [image create photo -width $w -height $h]
    468         }
     450        #
     451        # No shape extension.  Do the best we can by creating a
     452        # black line for all directions.
     453        #
     454        foreach {dir w h} [list \
     455            left   $itk_option(-stemlength) 3 \
     456            right  $itk_option(-stemlength) 3 \
     457            above  3 $itk_option(-stemlength) \
     458            below  3 $itk_option(-stemlength) \
     459        ] {
     460            set _stems($dir) [toplevel $itk_interior.s$dir \
     461                -width $w -height $h \
     462                -borderwidth 1 -relief solid -background black]
     463            wm withdraw $_stems($dir)
     464            wm overrideredirect $_stems($dir) yes
     465
     466            # create this for size, even though we don't really use it
     467            set _fills($dir) [image create photo -width $w -height $h]
     468        }
    469469    }
    470470}
     
    479479itcl::body Rappture::Balloon::outside {widget x y} {
    480480    return [expr {$x < [winfo rootx $widget]
    481              || $x > [winfo rootx $widget]+[winfo width $widget]
    482              || $y < [winfo rooty $widget]
    483              || $y > [winfo rooty $widget]+[winfo height $widget]}]
     481             || $x > [winfo rootx $widget]+[winfo width $widget]
     482             || $y < [winfo rooty $widget]
     483             || $y > [winfo rooty $widget]+[winfo height $widget]}]
    484484}
    485485
     
    493493itcl::configbody Rappture::Balloon::stemlength {
    494494    if {$itk_option(-stemlength) % 2 != 0} {
    495         error "stem length should be an even number of pixels"
     495        error "stem length should be an even number of pixels"
    496496    }
    497497}
     
    502502itcl::configbody Rappture::Balloon::dismissbutton {
    503503    if {![string is boolean $itk_option(-dismissbutton)]} {
    504         error "bad value \"$itk_option(-dismissbutton)\": should be on/off, 1/0, true/false, yes/no"
     504        error "bad value \"$itk_option(-dismissbutton)\": should be on/off, 1/0, true/false, yes/no"
    505505    }
    506506    if {$itk_option(-dismissbutton)} {
    507         pack $itk_component(titlebar) -before $itk_component(inner) \
    508             -side top -fill x
    509         pack $itk_component(dismiss) -side right -padx 4
     507        pack $itk_component(titlebar) -before $itk_component(inner) \
     508            -side top -fill x
     509        pack $itk_component(dismiss) -side right -padx 4
    510510    } elseif {"" != $itk_option(-title)} {
    511         pack $itk_component(titlebar) -before $itk_component(inner) \
    512             -side top -fill x
    513         pack forget $itk_component(dismiss)
     511        pack $itk_component(titlebar) -before $itk_component(inner) \
     512            -side top -fill x
     513        pack forget $itk_component(dismiss)
    514514    } else {
    515         pack forget $itk_component(titlebar)
     515        pack forget $itk_component(titlebar)
    516516    }
    517517}
     
    536536itcl::configbody Rappture::Balloon::title {
    537537    if {"" != $itk_option(-title) || $itk_option(-dismissbutton)} {
    538         pack $itk_component(titlebar) -before $itk_component(inner) \
    539             -side top -fill x
    540         if {$itk_option(-dismissbutton)} {
    541             pack $itk_component(dismiss) -side right -padx 4
    542         } else {
    543             pack forget $itk_component(dismiss)
    544         }
     538        pack $itk_component(titlebar) -before $itk_component(inner) \
     539            -side top -fill x
     540        if {$itk_option(-dismissbutton)} {
     541            pack $itk_component(dismiss) -side right -padx 4
     542        } else {
     543            pack forget $itk_component(dismiss)
     544        }
    545545    } else {
    546         pack forget $itk_component(titlebar)
    547     }
    548 }
     546        pack forget $itk_component(titlebar)
     547    }
     548}
  • branches/blt4/gui/scripts/barresult.tcl

    r1919 r1923  
    7878
    7979    constructor {args} {
    80         # defined below
     80        # defined below
    8181    }
    8282    destructor {
    83         # defined below
     83        # defined below
    8484    }
    8585    public method add {dataobj {settings ""}}
     
    8989    public method snap { w h }
    9090    public method parameters {title args} {
    91         # do nothing
     91        # do nothing
    9292    }
    9393    public method download {option args}
     
    718718            set elem "elem[incr count]"
    719719            set _elem2dataobj($elem) $dataobj
    720             set labels [$dataobj hints xticks]
    721             if { $labels != "" } {
    722                 $g axis configure $mapx \
    723                     -command [itcl::code $this _formatTickLabel] \
    724                     -minorticks 0
    725                 set _tickLabels $labels
    726             }
    727             $g element create $elem -x $xv -y $yv \
    728                 -borderwidth $lwidth -label $label \
    729                 -background $color -foreground $color -mapx $mapx -mapy $mapy
    730         }
     720            set labels [$dataobj hints xticks]
     721            if { $labels != "" } {
     722                $g axis configure $mapx \
     723                    -command [itcl::code $this _formatTickLabel] \
     724                    -minorticks 0
     725                set _tickLabels $labels
     726            }
     727            $g element create $elem -x $xv -y $yv \
     728                -borderwidth $lwidth -label $label \
     729                -background $color -foreground $color -mapx $mapx -mapy $mapy
     730        }
    731731    }
    732732
     
    806806    set g $itk_component(plot)
    807807    foreach axis [$g axis names] {
    808         $g axis configure $axis -min "" -max ""
     808        $g axis configure $axis -min "" -max ""
    809809    }
    810810    return
     
    909909    set tip ""
    910910    if {$state == "at"} {
    911         set results [$g element closest $x $y -interpolate yes]
     911        set results [$g element closest $x $y -interpolate yes]
    912912        if { $results != "" } {
    913             array set info $results
     913            array set info $results
    914914            # for dealing with xy line plots
    915915            set elem $info(name)
    916            
     916           
    917917            # Some elements are generated dynamically and therefore will
    918918            # not have a dataobj associated with them.
     
    922922                foreach {mapx mapy} [_getAxes $_elem2dataobj($elem)] break
    923923            }
    924            
     924           
    925925            # search again for an exact point -- this time don't interpolate
    926926            set tip ""
    927927            array unset info
    928             set results [$g element closest $x $y -interpolate no]
    929             array set info $results
     928            set results [$g element closest $x $y -interpolate no]
     929            array set info $results
    930930            if { [info exists info(name)] && $info(name) == $elem } {
    931                
     931               
    932932                set x [$g axis transform $mapx $info(x)]
    933933                set y [$g axis transform $mapy $info(y)]
     
    950950            set state 1
    951951        } else {
    952             set results [$g element closest $x $y -interpolate no]
    953             if { $results != ""  } {
    954                 array unset info
    955                 array set info $results
    956                 # for dealing with xy scatter plot
    957                 set elem $info(name)
    958                
    959                 # Some elements are generated dynamically and therefore will
    960                 # not have a dataobj associated with them.
    961                 set mapx [$g element cget $elem -mapx]
    962                 set mapy [$g element cget $elem -mapy]
    963                 if {[info exists _elem2dataobj($elem)]} {
    964                     foreach {mapx mapy} [_getAxes $_elem2dataobj($elem)] break
    965                 }
    966                
    967                 set tip ""
    968                 set x [$g axis transform $mapx $info(x)]
    969                 set y [$g axis transform $mapy $info(y)]
     952            set results [$g element closest $x $y -interpolate no]
     953            if { $results != ""  } {
     954                array unset info
     955                array set info $results
     956                # for dealing with xy scatter plot
     957                set elem $info(name)
    970958               
    971                 if {[info exists _elem2dataobj($elem)]} {
    972                     set dataobj $_elem2dataobj($elem)
    973                     set yunits [$dataobj hints yunits]
    974                     set xunits [$dataobj hints xunits]
    975                 } else {
    976                     set xunits ""
    977                     set yunits ""
    978                 }
    979                 set tip [$g element cget $elem -label]
    980                 set yval [_axis format y dummy $info(y)]
    981                 append tip "\n$yval$yunits"
    982                 set xval [_axis format x dummy $info(x)]
    983                 append tip " @ $xval$xunits"
    984                 set tip [string trim $tip]
    985                 set state 1
    986             } else {
    987                 set state 0
    988             }
    989         }
     959                # Some elements are generated dynamically and therefore will
     960                # not have a dataobj associated with them.
     961                set mapx [$g element cget $elem -mapx]
     962                set mapy [$g element cget $elem -mapy]
     963                if {[info exists _elem2dataobj($elem)]} {
     964                    foreach {mapx mapy} [_getAxes $_elem2dataobj($elem)] break
     965                }
     966               
     967                set tip ""
     968                set x [$g axis transform $mapx $info(x)]
     969                set y [$g axis transform $mapy $info(y)]
     970               
     971                if {[info exists _elem2dataobj($elem)]} {
     972                    set dataobj $_elem2dataobj($elem)
     973                    set yunits [$dataobj hints yunits]
     974                    set xunits [$dataobj hints xunits]
     975                } else {
     976                    set xunits ""
     977                    set yunits ""
     978                }
     979                set tip [$g element cget $elem -label]
     980                set yval [_axis format y dummy $info(y)]
     981                append tip "\n$yval$yunits"
     982                set xval [_axis format x dummy $info(x)]
     983                append tip " @ $xval$xunits"
     984                set tip [string trim $tip]
     985                set state 1
     986            } else {
     987                set state 0
     988            }
     989        }
    990990    }
    991991    if {$state} {
     
    10011001            Rappture::Tooltip::tooltip cancel
    10021002        }
    1003         set bg [$g element cget $elem -background]
    1004         set fg [$g element cget $elem -background]
     1003        set bg [$g element cget $elem -background]
     1004        set fg [$g element cget $elem -background]
    10051005        foreach {h s v} [Rappture::color::RGBtoHSV $fg] break
    1006         if { $v > 0.2 } {
    1007             set v [expr $v - 0.2]
    1008         }
    1009         set fg [Rappture::color::HSVtoRGB $h $s $v]
    1010         $g pen configure activeBar -background $bg -foreground $fg
     1006        if { $v > 0.2 } {
     1007            set v [expr $v - 0.2]
     1008        }
     1009        set fg [Rappture::color::HSVtoRGB $h $s $v]
     1010        $g pen configure activeBar -background $bg -foreground $fg
    10111011        $g element activate $elem
    10121012        set _hilite(elem) $elem
     
    11461146            if {$state} {
    11471147                $g axis activate $axis
    1148                 update
     1148                update
    11491149                set x [expr {[winfo pointerx $g]+4}]
    11501150                set y [expr {[winfo pointery $g]+4}]
     
    11521152            } else {
    11531153                $g axis deactivate $axis
    1154                 update
     1154                update
    11551155                Rappture::Tooltip::tooltip cancel
    11561156            }
     
    15191519        "-yoffset" "-yoffset"
    15201520        "-anchor" "-anchor"
    1521         "-rotate" "-rotate"
     1521        "-rotate" "-rotate"
    15221522    }
    15231523    set options {}
     
    15681568itcl::configbody Rappture::BarResult::gridcolor {
    15691569    if { "" == $itk_option(-gridcolor) } {
    1570         foreach axis [$itk_component(plot) axis names] {
    1571             $itk_component(plot) axis configure $axis -grid off
    1572         }
     1570        foreach axis [$itk_component(plot) axis names] {
     1571            $itk_component(plot) axis configure $axis -grid off
     1572        }
    15731573    } else {
    1574         foreach axis [$itk_component(plot) axis names] {
    1575             $itk_component(plot) axis configure $axis \
    1576                 -gridcolor $itk_option(-gridcolor) -grid on
    1577         }
     1574        foreach axis [$itk_component(plot) axis names] {
     1575            $itk_component(plot) axis configure $axis \
     1576                -gridcolor $itk_option(-gridcolor) -grid on
     1577        }
    15781578    }
    15791579}
     
    16141614    set g $itk_component(plot)
    16151615    if { $w <= 0 || $h <= 0 } {
    1616         set w [winfo width $g]
    1617         set h [winfo height $g]
     1616        set w [winfo width $g]
     1617        set h [winfo height $g]
    16181618    }
    16191619    set img [image create picture -width $w -height $h]
     
    16271627    set index [expr round($value)]
    16281628    if { $index != $value } {
    1629         return $value
     1629        return $value
    16301630    }
    16311631    return [lindex  $_tickLabels [expr $index - 1]]
    16321632    if { $label == "" } {
    1633         return $value
     1633        return $value
    16341634    }
    16351635    return $label
  • branches/blt4/gui/scripts/booleanentry.tcl

    r1646 r1923  
    4343itcl::body Rappture::BooleanEntry::constructor {owner path args} {
    4444    if {[catch {$owner isa Rappture::ControlOwner} valid] != 0 || !$valid} {
    45         error "bad object \"$owner\": should be Rappture::ControlOwner"
     45        error "bad object \"$owner\": should be Rappture::ControlOwner"
    4646    }
    4747    set _owner $owner
     
    4949
    5050    itk_component add -protected vframe {
    51         frame $itk_interior.vframe
     51        frame $itk_interior.vframe
    5252    }
    5353
     
    5555    set icon [$_owner xml get $path.about.icon]
    5656    if {$icon != ""} {
    57         itk_component add icon {
    58             set icon [image create picture -data $icon]
    59             set w [image width $icon]
    60             set h [image height $icon]
    61             canvas $itk_component(vframe).icon -height $h -width $w -borderwidth 0 -highlightthickness 0
    62         } {
    63             usual
    64             ignore -highlightthickness -highlightbackground -highlightcolor
    65         }
    66         set c $itk_component(icon)
    67         $c create image [expr {0.5*$w}] [expr {0.5*$h}] \
    68             -anchor center -image $icon
    69         pack $itk_component(icon) -fill x -side left
     57        itk_component add icon {
     58            set icon [image create picture -data $icon]
     59            set w [image width $icon]
     60            set h [image height $icon]
     61            canvas $itk_component(vframe).icon -height $h -width $w -borderwidth 0 -highlightthickness 0
     62        } {
     63            usual
     64            ignore -highlightthickness -highlightbackground -highlightcolor
     65        }
     66        set c $itk_component(icon)
     67        $c create image [expr {0.5*$w}] [expr {0.5*$h}] \
     68            -anchor center -image $icon
     69        pack $itk_component(icon) -fill x -side left
    7070    }
    7171   
     
    7575    #
    7676    itk_component add switch {
    77         set color [$_owner xml get $path.about.color]
    78         if {$color != ""} {
    79             Rappture::Switch $itk_component(vframe).switch -oncolor $color
    80         } else {
    81             Rappture::Switch $itk_component(vframe).switch
    82         }
     77        set color [$_owner xml get $path.about.color]
     78        if {$color != ""} {
     79            Rappture::Switch $itk_component(vframe).switch -oncolor $color
     80        } else {
     81            Rappture::Switch $itk_component(vframe).switch
     82        }
    8383    }
    8484
     
    9393    set str [$_owner xml get $path.default]
    9494    if {"" != $str} {
    95         $itk_component(switch) value $str
     95        $itk_component(switch) value $str
    9696    } else {
    97         $itk_component(switch) value off
     97        $itk_component(switch) value off
    9898    }
    9999}
     
    112112    set i [lsearch -exact $args -check]
    113113    if {$i >= 0} {
    114         set onlycheck 1
    115         set args [lreplace $args $i $i]
     114        set onlycheck 1
     115        set args [lreplace $args $i $i]
    116116    }
    117117
    118118    if {[llength $args] == 1} {
    119         if {$onlycheck} {
    120             # someday we may add validation...
    121             return
    122         }
    123         set newval [lindex $args 0]
    124         $itk_component(switch) value $newval
    125         event generate $itk_component(hull) <<Value>>
    126         return $newval
     119        if {$onlycheck} {
     120            # someday we may add validation...
     121            return
     122        }
     123        set newval [lindex $args 0]
     124        $itk_component(switch) value $newval
     125        event generate $itk_component(hull) <<Value>>
     126        return $newval
    127127
    128128    } elseif {[llength $args] != 0} {
    129         error "wrong # args: should be \"value ?-check? ?newval?\""
     129        error "wrong # args: should be \"value ?-check? ?newval?\""
    130130    }
    131131
     
    145145    set label [$_owner xml get $_path.about.label]
    146146    if {"" == $label} {
    147         set label "Boolean"
     147        set label "Boolean"
    148148    }
    149149    return $label
     
    180180    set valid {normal disabled}
    181181    if {[lsearch -exact $valid $itk_option(-state)] < 0} {
    182         error "bad value \"$itk_option(-state)\": should be [join $valid {, }]"
     182        error "bad value \"$itk_option(-state)\": should be [join $valid {, }]"
    183183    }
    184184    $itk_component(switch) configure -state $itk_option(-state)
  • branches/blt4/gui/scripts/bugreport.tcl

    r1911 r1923  
    7272    if {"@SHOWDETAILS" == $err} {
    7373        pack propagate .bugreport yes
    74         pack forget .bugreport.expl
    75         pack forget .bugreport.xmit
    76         pack forget .bugreport.done
     74        pack forget .bugreport.expl
     75        pack forget .bugreport.xmit
     76        pack forget .bugreport.done
    7777        pack forget .bugreport.cntls.show
    78         pack .bugreport.cntls -after .bugreport.banner -side bottom -fill x
    79         pack .bugreport.details -after .bugreport.banner \
    80             -expand yes -fill both -padx 8 -pady 8
    81         pack .bugreport.comments -after .bugreport.details \
    82             -expand yes -fill both -padx 8 -pady {0 8}
     78        pack .bugreport.cntls -after .bugreport.banner -side bottom -fill x
     79        pack .bugreport.details -after .bugreport.banner \
     80            -expand yes -fill both -padx 8 -pady 8
     81        pack .bugreport.comments -after .bugreport.details \
     82            -expand yes -fill both -padx 8 -pady {0 8}
    8383
    8484        update idletasks
     
    9292        wm geometry .bugreport $x$y
    9393        raise .bugreport
    94         return
     94        return
    9595    }
    9696
     
    118118        .bugreport.expl insert end "Something went wrong with this tool.  Help us understand what happened by submitting a trouble report, so we can fix the problem.  If you continue having trouble with this tool, please close it and restart."
    119119        .bugreport.cntls.send configure -state normal
    120         focus .bugreport.cntls.send
     120        focus .bugreport.cntls.send
    121121    } else {
    122122        .bugreport.expl insert end "Something went wrong with this tool.  We would ask you to submit a trouble report about the error, but we can't tell what hub it should be submitted to.  If you continue having trouble with this tool, please close it and restart."
    123123        pack forget .bugreport.comments
    124124        .bugreport.cntls.send configure -state disabled
    125         focus .bugreport.cntls.ok
     125        focus .bugreport.cntls.ok
    126126    }
    127127    fixTextHeight .bugreport.expl
     
    293293    # handle the result
    294294    if {$status != 0} {
    295         # add error to the details field, so we can see it with magic clicks
    296         .bugreport.details.info.text configure -state normal
    297         .bugreport.details.info.text insert 1.0 "Ticket submission failed:\n$result\n-----\n"
    298         .bugreport.details.info.text configure -state disabled
    299 
    300         .bugreport.expl insert end "Oops! Ticket submission failed:\n$result\n\nIf you want to report the original problem, you can file your own trouble report by going to the web site and clicking on the \"Help\" or \"Support\" link on the main navigation bar.  If you continue having trouble with this tool, please close it and restart."
     295        # add error to the details field, so we can see it with magic clicks
     296        .bugreport.details.info.text configure -state normal
     297        .bugreport.details.info.text insert 1.0 "Ticket submission failed:\n$result\n-----\n"
     298        .bugreport.details.info.text configure -state disabled
     299
     300        .bugreport.expl insert end "Oops! Ticket submission failed:\n$result\n\nIf you want to report the original problem, you can file your own trouble report by going to the web site and clicking on the \"Help\" or \"Support\" link on the main navigation bar.  If you continue having trouble with this tool, please close it and restart."
    301301    } elseif {[regexp {Ticket #([0-9]*) +\((.*?)\) +([0-9]+) +times} $result match ticket extra times]} {
    302         .bugreport.expl insert end "This problem has been reported as " "" "Ticket #$ticket" bold " in our system." ""
    303         if {[string is integer $times] && $times > 1} {
    304             .bugreport.expl insert end "  This particular problem has been reported $times times."
    305         }
    306         .bugreport.expl insert end "\n\nIf you continue having trouble with this tool, please close it and restart.  Thanks for reporting the problem and helping us improve things!"
     302        .bugreport.expl insert end "This problem has been reported as " "" "Ticket #$ticket" bold " in our system." ""
     303        if {[string is integer $times] && $times > 1} {
     304            .bugreport.expl insert end "  This particular problem has been reported $times times."
     305        }
     306        .bugreport.expl insert end "\n\nIf you continue having trouble with this tool, please close it and restart.  Thanks for reporting the problem and helping us improve things!"
    307307    } else {
    308         .bugreport.expl insert end "This problem has been reported.  Here is the response from the hub, which may contain information about your ticket:\n" "" $result bold "\n\nIf you continue having trouble with this tool, please close it and restart.  Thanks for reporting the problem and helping us improve things!" ""
     308        .bugreport.expl insert end "This problem has been reported.  Here is the response from the hub, which may contain information about your ticket:\n" "" $result bold "\n\nIf you continue having trouble with this tool, please close it and restart.  Thanks for reporting the problem and helping us improve things!" ""
    309309    }
    310310    fixTextHeight .bugreport.expl
     
    334334    set stackTrace "$err\n---------\n$errorInfo\n---------\n$extraInfo"
    335335    if {![regexp {^([^\n]+)\n} $stackTrace match summary]} {
    336         if {[string length $stackTrace] == 0} {
    337             set summary "Unexpected error from Rappture"
    338         } else {
    339             set summary $stackTrace
    340         }
     336        if {[string length $stackTrace] == 0} {
     337            set summary "Unexpected error from Rappture"
     338        } else {
     339            set summary $stackTrace
     340        }
    341341    }
    342342    if {[string length $summary] > 200} {
    343         set summary "[string range $summary 0 200]..."
     343        set summary "[string range $summary 0 200]..."
    344344    }
    345345    if {[string match {Problem launching job*} $summary]} {
    346         append summary " (in tool \"[Rappture::Tool::resources -appname]\")"
    347         set category "Tools"
     346        append summary " (in tool \"[Rappture::Tool::resources -appname]\")"
     347        set category "Tools"
    348348    } else {
    349         set category $settings(category)
     349        set category $settings(category)
    350350    }
    351351
     
    353353    set toolong 20000
    354354    if {[string length $stackTrace] > $toolong} {
    355         #
    356         # If this came from "Problem launching job", then it will have
    357         # a "== RAPPTURE INPUT ==" part somewhere in the middle.  Try
    358         # to show the first part, this middle part, and the very last
    359         # part, cutting out whatever we have to in the middle.
    360         #
    361         if {[regexp -indices {\n== RAPPTURE INPUT ==\n} $stackTrace match]} {
    362             foreach {smid0 smid1} $match break
    363             set quarter [expr {$toolong/4}]
    364             set s0 $quarter
    365             set smid0 [expr {$smid0-$quarter}]
    366             set smid1 [expr {$smid1+$quarter}]
    367             set s1 [expr {[string length $stackTrace]-$quarter}]
    368 
    369             if {$smid0 < $s0} {
    370                 # first part is short -- truncate last part
    371                 set stackTrace "[string range $stackTrace 0 $smid1]\n...\n[string range $stackTrace [expr {[string length $stackTrace]-($toolong-$smid1)}] end]"
    372             } elseif {$smid1 > $s1} {
    373                 # last part is short -- truncate first part
    374                 set tailsize [expr {[string length $stackTrace]-$smid0}]
    375                 set stackTrace "[string range $stackTrace 0 [expr {$toolong-$tailsize}]]\n...\n[string range $stackTrace $smid0 end]"
    376             } else {
    377                 # rappture input line is right about in the middle
    378                 set stackTrace "[string range $stackTrace 0 $s0]\n...\n[string range $stackTrace $smid0 $smid1]\n...\n[string range $stackTrace $s1 end]"
    379             }
    380         } else {
    381             # no Rappture input -- just show first part and last part
    382             set half [expr {$toolong/2}]
    383             set stackTrace "[string range $stackTrace 0 $half]\n...\n[string range $stackTrace [expr {[string length $stackTrace]-$half}] end]"
    384         }
     355        #
     356        # If this came from "Problem launching job", then it will have
     357        # a "== RAPPTURE INPUT ==" part somewhere in the middle.  Try
     358        # to show the first part, this middle part, and the very last
     359        # part, cutting out whatever we have to in the middle.
     360        #
     361        if {[regexp -indices {\n== RAPPTURE INPUT ==\n} $stackTrace match]} {
     362            foreach {smid0 smid1} $match break
     363            set quarter [expr {$toolong/4}]
     364            set s0 $quarter
     365            set smid0 [expr {$smid0-$quarter}]
     366            set smid1 [expr {$smid1+$quarter}]
     367            set s1 [expr {[string length $stackTrace]-$quarter}]
     368
     369            if {$smid0 < $s0} {
     370                # first part is short -- truncate last part
     371                set stackTrace "[string range $stackTrace 0 $smid1]\n...\n[string range $stackTrace [expr {[string length $stackTrace]-($toolong-$smid1)}] end]"
     372            } elseif {$smid1 > $s1} {
     373                # last part is short -- truncate first part
     374                set tailsize [expr {[string length $stackTrace]-$smid0}]
     375                set stackTrace "[string range $stackTrace 0 [expr {$toolong-$tailsize}]]\n...\n[string range $stackTrace $smid0 end]"
     376            } else {
     377                # rappture input line is right about in the middle
     378                set stackTrace "[string range $stackTrace 0 $s0]\n...\n[string range $stackTrace $smid0 $smid1]\n...\n[string range $stackTrace $s1 end]"
     379            }
     380        } else {
     381            # no Rappture input -- just show first part and last part
     382            set half [expr {$toolong/2}]
     383            set stackTrace "[string range $stackTrace 0 $half]\n...\n[string range $stackTrace [expr {[string length $stackTrace]-$half}] end]"
     384        }
    385385    }
    386386
     
    418418
    419419    set query [http::formatQuery \
    420         option com_support \
    421         task create \
    422         no_html 1 \
    423         report $report \
    424         sesstoken $details(session) \
    425         hostname $details(hostname) \
    426         os $details(platform) \
    427         category $details(category) \
    428         summary $details(summary) \
    429         referrer $details(referrer) \
    430         login $settings(user) \
    431         group $settings(group) \
    432         type $settings(type) \
     420        option com_support \
     421        task create \
     422        no_html 1 \
     423        report $report \
     424        sesstoken $details(session) \
     425        hostname $details(hostname) \
     426        os $details(platform) \
     427        category $details(category) \
     428        summary $details(summary) \
     429        referrer $details(referrer) \
     430        login $settings(user) \
     431        group $settings(group) \
     432        type $settings(type) \
    433433    ]
    434434   
    435435    set url [Rappture::Tool::resources -huburl]
    436436    if {[string index $url end] == "/"} {
    437         append url "index.php"
     437        append url "index.php"
    438438    } else {
    439         append url "/index.php"
     439        append url "/index.php"
    440440    }
    441441
     
    443443
    444444    if {[http::ncode $token] != 200} {
    445         error [http::code $token]
     445        error [http::code $token]
    446446    }
    447447    upvar #0 $token rval
     
    450450
    451451    if {[regexp {Ticket #[0-9]* +\(.*?\) +[0-9]+ +times} $info match]} {
    452         return $match
     452        return $match
    453453    }
    454454    error "Report received, but ticket may not have been filed.  Here's the result...\n$info"
     
    471471    } else {
    472472        for {set h 1} {$h < 15} {incr h} {
    473             $widget configure -height $h
    474             $widget see 1.0
    475             update idletasks
    476             if {"" != [$widget bbox end-1char]} {
    477                 break
    478             }
     473            $widget configure -height $h
     474            $widget see 1.0
     475            update idletasks
     476            if {"" != [$widget bbox end-1char]} {
     477                break
     478            }
    479479        }
    480480    }
     
    496496
    497497    switch -- $option {
    498         jobfailures {
    499             variable reportJobFailures
    500             if {![string is boolean $value]} {
    501                 error "bad value \"$value\": should be boolean"
    502             }
    503             set reportJobFailures $value
    504         }
    505         for {
    506             # is it being run within a workspace?
    507             set appname [Rappture::Tool::resources -appname]
    508             if {[string match {[Ww]orkspace*} $appname]} {
    509                 return 0
    510             }
    511 
    512             # if this is a problem launching a job and the tool
    513             # expects this, then don't bother with automatic reports.
    514             variable reportJobFailures
    515             if {"jobs" == $value && !$reportJobFailures} {
    516                 return 0
    517             }
    518 
    519             # this is a real problem -- report it!
    520             return 1
    521         }
    522         default {
    523             error "bad option \"$option\": should be jobfailures or for"
    524         }
     498        jobfailures {
     499            variable reportJobFailures
     500            if {![string is boolean $value]} {
     501                error "bad value \"$value\": should be boolean"
     502            }
     503            set reportJobFailures $value
     504        }
     505        for {
     506            # is it being run within a workspace?
     507            set appname [Rappture::Tool::resources -appname]
     508            if {[string match {[Ww]orkspace*} $appname]} {
     509                return 0
     510            }
     511
     512            # if this is a problem launching a job and the tool
     513            # expects this, then don't bother with automatic reports.
     514            variable reportJobFailures
     515            if {"jobs" == $value && !$reportJobFailures} {
     516                return 0
     517            }
     518
     519            # this is a real problem -- report it!
     520            return 1
     521        }
     522        default {
     523            error "bad option \"$option\": should be jobfailures or for"
     524        }
    525525    }
    526526}
  • branches/blt4/gui/scripts/choiceentry.tcl

    r1342 r1923  
    4747itcl::body Rappture::ChoiceEntry::constructor {owner path args} {
    4848    if {[catch {$owner isa Rappture::ControlOwner} valid] != 0 || !$valid} {
    49         error "bad object \"$owner\": should be Rappture::ControlOwner"
     49        error "bad object \"$owner\": should be Rappture::ControlOwner"
    5050    }
    5151    set _owner $owner
     
    5757    #
    5858    itk_component add choice {
    59         Rappture::Combobox $itk_interior.choice -editable no
     59        Rappture::Combobox $itk_interior.choice -editable no
    6060    }
    6161    pack $itk_component(choice) -expand yes -fill both
     
    8787    set i [lsearch -exact $args -check]
    8888    if {$i >= 0} {
    89         set onlycheck 1
    90         set args [lreplace $args $i $i]
     89        set onlycheck 1
     90        set args [lreplace $args $i $i]
    9191    }
    9292
    9393    if {[llength $args] == 1} {
    94         if {$onlycheck} {
    95             # someday we may add validation...
    96             return
    97         }
    98         set newval [lindex $args 0]
    99         if {[info exists _str2val($newval)]} {
    100             # this is a label -- use it directly
    101             $itk_component(choice) value $newval
    102             set newval $_str2val($newval)  ;# report the actual value
    103         } else {
    104             # this is a value -- search for corresponding label
    105             foreach str [array names _str2val] {
    106                 if {$_str2val($str) == $newval} {
    107                     $itk_component(choice) value $str
    108                     break
    109                 }
    110             }
    111         }
    112         return $newval
     94        if {$onlycheck} {
     95            # someday we may add validation...
     96            return
     97        }
     98        set newval [lindex $args 0]
     99        if {[info exists _str2val($newval)]} {
     100            # this is a label -- use it directly
     101            $itk_component(choice) value $newval
     102            set newval $_str2val($newval)  ;# report the actual value
     103        } else {
     104            # this is a value -- search for corresponding label
     105            foreach str [array names _str2val] {
     106                if {$_str2val($str) == $newval} {
     107                    $itk_component(choice) value $str
     108                    break
     109                }
     110            }
     111        }
     112        return $newval
    113113
    114114    } elseif {[llength $args] != 0} {
    115         error "wrong # args: should be \"value ?-check? ?newval?\""
     115        error "wrong # args: should be \"value ?-check? ?newval?\""
    116116    }
    117117
     
    121121    set str [$itk_component(choice) value]
    122122    if {[info exists _str2val($str)]} {
    123         return $_str2val($str)
     123        return $_str2val($str)
    124124    }
    125125    return $str
     
    135135    set label [$_owner xml get $_path.about.label]
    136136    if {"" == $label} {
    137         set label "Choice"
     137        set label "Choice"
    138138    }
    139139    return $label
     
    171171    set max 10
    172172    foreach cname [$_owner xml children -type option $_path] {
    173         set path [string trim [$_owner xml get $_path.$cname.path]]
    174         if {"" != $path} {
    175             # look for the input element controlling this path
    176             set found 0
    177             foreach cntl [Rappture::entities [$_owner xml object] "input"] {
    178                 set len [string length $cntl]
    179                 if {[string equal -length $len $cntl $path]} {
    180                     set found 1
    181                     break
    182                 }
    183             }
    184             if {$found} {
    185                 #
    186                 # Choice comes from a list of matching entities at
    187                 # a particular XML path.  Use the <label> as a template
    188                 # for each item on the path.
    189                 #
    190                 $_owner notify add $this $cntl [itcl::code $this _rebuild]
    191 
    192                 set label [string trim [$_owner xml get $_path.$cname.about.label]]
    193                 if {"" == $label} {
    194                     set label "%type #%n"
    195                 }
    196 
    197                 set ppath [Rappture::LibraryObj::path2list $path]
    198                 set leading [join [lrange $ppath 0 end-1] .]
    199                 set tail [lindex $ppath end]
    200                 set n 1
    201                 foreach ccname [$_owner xml children $leading] {
    202                     if {[string match $tail $ccname]} {
    203                         set subst(%n) $n
    204                         set subst(%type) [$_owner xml element -as type $leading.$ccname]
    205                         set subst(%id) [$_owner xml element -as id $leading.$ccname]
    206                         foreach detail [$_owner xml children $leading.$ccname] {
    207                             set subst(%$detail) [$_owner xml get $leading.$ccname.$detail]
    208                         }
    209                         set str [string map [array get subst] $label]
    210                         $itk_component(choice) choices insert end \
    211                             $leading.$ccname $str
    212                         incr n
    213                     }
    214                 }
    215                 $itk_component(choice) value ""
    216             } else {
    217                 puts "can't find controlling entity for path \"$path\""
    218             }
    219         } else {
    220             #
    221             # Choice is an ordinary LABEL.
    222             # Add the label as-is into the list of choices.
    223             #
    224             set val [string trim [$_owner xml get $_path.$cname.value]]
    225             set str [string trim [$_owner xml get $_path.$cname.about.label]]
    226             if {"" == $val} {
    227                 set val $str
    228             }
    229             if {"" != $str} {
    230                 set _str2val($str) $val
    231                 $itk_component(choice) choices insert end $_path.$cname $str
    232                 set len [string length $str]
    233                 if {$len > $max} { set max $len }
    234             }
    235         }
     173        set path [string trim [$_owner xml get $_path.$cname.path]]
     174        if {"" != $path} {
     175            # look for the input element controlling this path
     176            set found 0
     177            foreach cntl [Rappture::entities [$_owner xml object] "input"] {
     178                set len [string length $cntl]
     179                if {[string equal -length $len $cntl $path]} {
     180                    set found 1
     181                    break
     182                }
     183            }
     184            if {$found} {
     185                #
     186                # Choice comes from a list of matching entities at
     187                # a particular XML path.  Use the <label> as a template
     188                # for each item on the path.
     189                #
     190                $_owner notify add $this $cntl [itcl::code $this _rebuild]
     191
     192                set label [string trim [$_owner xml get $_path.$cname.about.label]]
     193                if {"" == $label} {
     194                    set label "%type #%n"
     195                }
     196
     197                set ppath [Rappture::LibraryObj::path2list $path]
     198                set leading [join [lrange $ppath 0 end-1] .]
     199                set tail [lindex $ppath end]
     200                set n 1
     201                foreach ccname [$_owner xml children $leading] {
     202                    if {[string match $tail $ccname]} {
     203                        set subst(%n) $n
     204                        set subst(%type) [$_owner xml element -as type $leading.$ccname]
     205                        set subst(%id) [$_owner xml element -as id $leading.$ccname]
     206                        foreach detail [$_owner xml children $leading.$ccname] {
     207                            set subst(%$detail) [$_owner xml get $leading.$ccname.$detail]
     208                        }
     209                        set str [string map [array get subst] $label]
     210                        $itk_component(choice) choices insert end \
     211                            $leading.$ccname $str
     212                        incr n
     213                    }
     214                }
     215                $itk_component(choice) value ""
     216            } else {
     217                puts "can't find controlling entity for path \"$path\""
     218            }
     219        } else {
     220            #
     221            # Choice is an ordinary LABEL.
     222            # Add the label as-is into the list of choices.
     223            #
     224            set val [string trim [$_owner xml get $_path.$cname.value]]
     225            set str [string trim [$_owner xml get $_path.$cname.about.label]]
     226            if {"" == $val} {
     227                set val $str
     228            }
     229            if {"" != $str} {
     230                set _str2val($str) $val
     231                $itk_component(choice) choices insert end $_path.$cname $str
     232                set len [string length $str]
     233                if {$len > $max} { set max $len }
     234            }
     235        }
    236236    }
    237237    $itk_component(choice) configure -width $max
     
    242242    set defval [$_owner xml get $_path.default]
    243243    if {"" != $defval} {
    244         if {[info exists _str2val($defval)]} {
    245             $itk_component(choice) value $defval
    246         } else {
    247             foreach str [array names _str2val] {
    248                 if {$_str2val($str) == $defval} {
    249                     $itk_component(choice) value $str
    250                     break
    251                 }
    252             }
    253         }
     244        if {[info exists _str2val($defval)]} {
     245            $itk_component(choice) value $defval
     246        } else {
     247            foreach str [array names _str2val] {
     248                if {$_str2val($str) == $defval} {
     249                    $itk_component(choice) value $str
     250                    break
     251                }
     252            }
     253        }
    254254    }
    255255}
     
    280280    set desc ""
    281281    if {$path != ""} {
    282         set desc [$_owner xml get $path.about.description]
     282        set desc [$_owner xml get $path.about.description]
    283283    }
    284284
    285285    if {[string length $str] > 0 && [string length $desc] > 0} {
    286         append tip "\n\n$str:\n$desc"
     286        append tip "\n\n$str:\n$desc"
    287287    }
    288288    return $tip
     
    295295    set valid {normal disabled}
    296296    if {[lsearch -exact $valid $itk_option(-state)] < 0} {
    297         error "bad value \"$itk_option(-state)\": should be [join $valid {, }]"
     297        error "bad value \"$itk_option(-state)\": should be [join $valid {, }]"
    298298    }
    299299    $itk_component(choice) configure -state $itk_option(-state)
  • branches/blt4/gui/scripts/cloud.tcl

    r1342 r1923  
    5252    set handle "$xmlobj|$path"
    5353    if {[info exists _xp2obj($handle)]} {
    54         set obj $_xp2obj($handle)
    55         incr _obj2ref($obj)
    56         return $obj
     54        set obj $_xp2obj($handle)
     55        incr _obj2ref($obj)
     56        return $obj
    5757    }
    5858
     
    7373itcl::body Rappture::Cloud::release {obj} {
    7474    if {[info exists _obj2ref($obj)]} {
    75         incr _obj2ref($obj) -1
    76         if {$_obj2ref($obj) <= 0} {
    77             unset _obj2ref($obj)
    78             foreach handle [array names _xp2obj] {
    79                 if {$_xp2obj($handle) == $obj} {
    80                     unset _xp2obj($handle)
    81                 }
    82             }
    83             itcl::delete object $obj
    84         }
     75        incr _obj2ref($obj) -1
     76        if {$_obj2ref($obj) <= 0} {
     77            unset _obj2ref($obj)
     78            foreach handle [array names _xp2obj] {
     79                if {$_xp2obj($handle) == $obj} {
     80                    unset _xp2obj($handle)
     81                }
     82            }
     83            itcl::delete object $obj
     84        }
    8585    } else {
    86         error "can't find reference count for $obj"
     86        error "can't find reference count for $obj"
    8787    }
    8888}
     
    9393itcl::body Rappture::Cloud::constructor {xmlobj path} {
    9494    if {![Rappture::library isvalid $xmlobj]} {
    95         error "bad value \"$xmlobj\": should be Rappture::library"
     95        error "bad value \"$xmlobj\": should be Rappture::library"
    9696    }
    9797    set _xmlobj $xmlobj
     
    100100    set u [$_cloud get units]
    101101    if {"" != $u} {
    102         while {[llength $u] < 3} {
    103             lappend u [lindex $u end]
    104         }
    105         set _units $u
     102        while {[llength $u] < 3} {
     103            lappend u [lindex $u end]
     104        }
     105        set _units $u
    106106    }
    107107
     
    110110
    111111    foreach lim {xmin xmax ymin ymax zmin zmax} {
    112         set _limits($lim) ""
     112        set _limits($lim) ""
    113113    }
    114114
    115115    foreach line [split [$xmlobj get $path.points] \n] {
    116         if {"" == [string trim $line]} {
    117             continue
    118         }
    119 
    120         # make sure we have x,y,z
    121         while {[llength $line] < 3} {
    122             lappend line "0"
    123         }
    124 
    125         # extract each point and add it to the points list
    126         foreach {x y z} $line break
    127         foreach dim {x y z} units $_units {
    128             set v [Rappture::Units::convert [set $dim] \
    129                 -context $units -to $units -units off]
    130 
    131             set $dim $v  ;# save back to real x/y/z variable
    132 
    133             if {"" == $_limits(${dim}min)} {
    134                 set _limits(${dim}min) $v
    135                 set _limits(${dim}max) $v
    136             } else {
    137                 if {$v < $_limits(${dim}min)} { set _limits(${dim}min) $v }
    138                 if {$v > $_limits(${dim}max)} { set _limits(${dim}max) $v }
    139             }
    140         }
    141         $this-points InsertNextPoint $x $y $z
     116        if {"" == [string trim $line]} {
     117            continue
     118        }
     119
     120        # make sure we have x,y,z
     121        while {[llength $line] < 3} {
     122            lappend line "0"
     123        }
     124
     125        # extract each point and add it to the points list
     126        foreach {x y z} $line break
     127        foreach dim {x y z} units $_units {
     128            set v [Rappture::Units::convert [set $dim] \
     129                -context $units -to $units -units off]
     130
     131            set $dim $v  ;# save back to real x/y/z variable
     132
     133            if {"" == $_limits(${dim}min)} {
     134                set _limits(${dim}min) $v
     135                set _limits(${dim}max) $v
     136            } else {
     137                if {$v < $_limits(${dim}min)} { set _limits(${dim}min) $v }
     138                if {$v > $_limits(${dim}max)} { set _limits(${dim}max) $v }
     139            }
     140        }
     141        $this-points InsertNextPoint $x $y $z
    142142    }
    143143}
     
    188188    set dims 0
    189189    foreach d {x y z} {
    190         if {$_limits(${d}min) != $_limits(${d}max)} {
    191             incr dims
    192         }
     190        if {$_limits(${d}min) != $_limits(${d}max)} {
     191            incr dims
     192        }
    193193    }
    194194    return $dims
     
    202202itcl::body Rappture::Cloud::limits {which} {
    203203    if {![info exists _limits(${which}min)]} {
    204         error "bad axis \"$which\": should be x, y, z"
     204        error "bad axis \"$which\": should be x, y, z"
    205205    }
    206206    return [list $_limits(${which}min) $_limits(${which}max)]
     
    216216itcl::body Rappture::Cloud::hints {{keyword ""}} {
    217217    foreach key {label color units} {
    218         set str [$_cloud get $key]
    219         if {"" != $str} {
    220             set hints($key) $str
    221         }
     218        set str [$_cloud get $key]
     219        if {"" != $str} {
     220            set hints($key) $str
     221        }
    222222    }
    223223
    224224    if {$keyword != ""} {
    225         if {[info exists hints($keyword)]} {
    226             return $hints($keyword)
    227         }
    228         return ""
     225        if {[info exists hints($keyword)]} {
     226            return $hints($keyword)
     227        }
     228        return ""
    229229    }
    230230    return [array get hints]
  • branches/blt4/gui/scripts/color.tcl

    r1342 r1923  
    2727    # if frac overflows the value, pass changes along to saturation
    2828    if {$v < 0} {
    29         set s [expr {$s+$v}]
    30         if {$s < 0} { set s 0 }
    31         set v 0
     29        set s [expr {$s+$v}]
     30        if {$s < 0} { set s 0 }
     31        set v 0
    3232    }
    3333    if {$v > 1} {
    34         set s [expr {$s-($v-1)}]
    35         if {$s < 0} { set s 0 }
    36         set v 1
     34        set s [expr {$s-($v-1)}]
     35        if {$s < 0} { set s 0 }
     36        set v 1
    3737    }
    3838
     
    5050    foreach {h s v} [Rappture::color::RGBtoHSV $color] { break }
    5151    if {$v < $min} {
    52         set v $min
     52        set v $min
    5353    }
    5454    return [Rappture::color::HSVtoRGB $h $s $v]
     
    6565    foreach {h s v} [Rappture::color::RGBtoHSV $color] { break }
    6666    if {$v > $max} {
    67         set v $max
     67        set v $max
    6868    }
    6969    return [Rappture::color::HSVtoRGB $h $s $v]
     
    8282    #
    8383    if { [catch {winfo rgb . $color} status] != 0 } {
    84         set s 0
    85         set v 0
    86         set h 0
    87         return [list $h $s $v]
     84        set s 0
     85        set v 0
     86        set h 0
     87        return [list $h $s $v]
    8888    }
    8989    foreach {r g b} $status {}
     
    9898
    9999    if { $delta == 0 } {
    100         # delta=0 => gray color
    101         set s 0
    102         set v [expr {$r/65535.0}]
    103         set h 0
    104         return [list $h $s $v]
     100        # delta=0 => gray color
     101        set s 0
     102        set v [expr {$r/65535.0}]
     103        set h 0
     104        return [list $h $s $v]
    105105    }
    106106 
    107107    if {$max > 0} {
    108         set s [expr {$delta/double($max)}]
    109     } else {
    110         # r=g=b=0  =>  s=0, v undefined
    111         set s 0
    112         set v 0
    113         set h 0
    114         return [list $h $s $v]
     108        set s [expr {$delta/double($max)}]
     109    } else {
     110        # r=g=b=0  =>  s=0, v undefined
     111        set s 0
     112        set v 0
     113        set h 0
     114        return [list $h $s $v]
    115115    }
    116116
    117117    if {$r == $max} {
    118         set h [expr {($g - $b)/double($delta)}]
     118        set h [expr {($g - $b)/double($delta)}]
    119119    } elseif {$g == $max} {
    120         set h [expr {2 + ($b - $r)/double($delta)}]
    121     } else {
    122         set h [expr {4 + ($r - $g)/double($delta)}]
     120        set h [expr {2 + ($b - $r)/double($delta)}]
     121    } else {
     122        set h [expr {4 + ($r - $g)/double($delta)}]
    123123    }
    124124    set h [expr {$h*1.04719756667}] ;# *60 degrees
    125125    if {$h < 0} {
    126         set h [expr {$h+6.2831854}]
     126        set h [expr {$h+6.2831854}]
    127127    }
    128128    return [list $h $s $v]
     
    138138proc Rappture::color::HSVtoRGB {h s v} {
    139139    if {$s == 0} {
    140         set v [expr round(255*$v)]
    141         set r $v
    142         set g $v
    143         set b $v
    144     } else {
    145         if {$h >= 6.28318} {set h [expr $h-6.28318]}
    146         set h [expr $h/1.0472]
    147         set f [expr $h-floor($h)]
    148         set p [expr round(255*$v*(1.0-$s))]
    149         set q [expr round(255*$v*(1.0-$s*$f))]
    150         set t [expr round(255*$v*(1.0-$s*(1.0-$f)))]
    151         set v [expr round(255*$v)]
    152 
    153         switch [expr int($h)] {
    154             0 {set r $v; set g $t; set b $p}
    155             1 {set r $q; set g $v; set b $p}
    156             2 {set r $p; set g $v; set b $t}
    157             3 {set r $p; set g $q; set b $v}
    158             4 {set r $t; set g $p; set b $v}
    159             5 {set r $v; set g $p; set b $q}
    160         }
     140        set v [expr round(255*$v)]
     141        set r $v
     142        set g $v
     143        set b $v
     144    } else {
     145        if {$h >= 6.28318} {set h [expr $h-6.28318]}
     146        set h [expr $h/1.0472]
     147        set f [expr $h-floor($h)]
     148        set p [expr round(255*$v*(1.0-$s))]
     149        set q [expr round(255*$v*(1.0-$s*$f))]
     150        set t [expr round(255*$v*(1.0-$s*(1.0-$f)))]
     151        set v [expr round(255*$v)]
     152
     153        switch [expr int($h)] {
     154            0 {set r $v; set g $t; set b $p}
     155            1 {set r $q; set g $v; set b $p}
     156            2 {set r $p; set g $v; set b $t}
     157            3 {set r $p; set g $q; set b $v}
     158            4 {set r $t; set g $p; set b $v}
     159            5 {set r $v; set g $p; set b $q}
     160        }
    161161    }
    162162    return [format "#%.2x%.2x%.2x" $r $g $b]
     
    177177
    178178    if {$wl < 380 || $wl > 780} {
    179         return black
     179        return black
    180180    }
    181181    set gamma 0.8
     
    184184    set b 0.0
    185185    if {$wl <= 440} {
    186         set r [expr (440.0 - $wl) / 60.0]
    187         set b 1.0
     186        set r [expr (440.0 - $wl) / 60.0]
     187        set b 1.0
    188188    } elseif {$wl <= 490} {
    189         set g [expr ($wl - 440.0) / 50.0]
    190         set b 1.0
     189        set g [expr ($wl - 440.0) / 50.0]
     190        set b 1.0
    191191    } elseif {$wl <= 510} {
    192         set g 1.0
    193         set b [expr (510.0 - $wl) / 20.0]
     192        set g 1.0
     193        set b [expr (510.0 - $wl) / 20.0]
    194194    } elseif {$wl <= 580} {
    195         set g 1.0
    196         set r [expr ($wl - 510.0) / 70.0]
     195        set g 1.0
     196        set r [expr ($wl - 510.0) / 70.0]
    197197    } elseif {$wl <= 645} {
    198         set r 1.0
    199         set g [expr (645.0 - $wl) / 65.0]
    200     } else {
    201         set r 1.0
     198        set r 1.0
     199        set g [expr (645.0 - $wl) / 65.0]
     200    } else {
     201        set r 1.0
    202202    }
    203203
    204204    if {$wl > 700} {
    205         set sss [expr 0.3 + 0.7 * (780.0 - $wl) / 80.0]
     205        set sss [expr 0.3 + 0.7 * (780.0 - $wl) / 80.0]
    206206    } elseif {$wl < 420} {
    207         set sss [expr 0.3 + 0.7 * ($wl - 380.0) / 40.0]
    208     } else {
    209         set sss 1.0
     207        set sss [expr 0.3 + 0.7 * ($wl - 380.0) / 40.0]
     208    } else {
     209        set sss 1.0
    210210    }
    211211    set r [expr int(255.0 * pow(($sss * $r), $gamma))]
     
    221221proc Rappture::color::RGB {color} {
    222222    if {[string match "*nm" $color]} {
    223         set color [Rappture::color::wave2RGB [string trimright $color "nm"]]
     223        set color [Rappture::color::wave2RGB [string trimright $color "nm"]]
    224224    }
    225225    return [winfo rgb . $color]
  • branches/blt4/gui/scripts/combobox.tcl

    r1897 r1923  
    5050
    5151    blt::bitmap define ComboboxArrow {
    52         #define arrow_width 8
    53         #define arrow_height 4
    54         static unsigned char arrow_bits[] = {
    55            0xfe, 0x7c, 0x38, 0x10};
     52        #define arrow_width 8
     53        #define arrow_height 4
     54        static unsigned char arrow_bits[] = {
     55           0xfe, 0x7c, 0x38, 0x10};
    5656    }
    5757    private variable _value2label
    5858    private variable _label2value
    5959}
    60                                                                                
     60                                                                               
    6161itk::usual Combobox {
    6262    keep -cursor -font
     
    7373
    7474    itk_component add button {
    75         button $itk_interior.btn -bitmap ComboboxArrow -padx 0 \
    76             -borderwidth 1 -relief raised -highlightthickness 0
     75        button $itk_interior.btn -bitmap ComboboxArrow -padx 0 \
     76            -borderwidth 1 -relief raised -highlightthickness 0
    7777    } {
    78         usual
    79         ignore -highlightthickness -highlightbackground -highlightcolor
    80         ignore -borderwidth -relief
     78        usual
     79        ignore -highlightthickness -highlightbackground -highlightcolor
     80        ignore -borderwidth -relief
    8181    }
    8282    pack $itk_component(button) -side right -fill y
    8383
    8484    itk_component add entry {
    85         entry $itk_interior.entry -borderwidth 0 -relief flat
     85        entry $itk_interior.entry -borderwidth 0 -relief flat
    8686    } {
    87         usual
    88         keep -width
    89         rename -highlightbackground -textbackground textBackground Background
    90         rename -background -textbackground textBackground Background
    91         rename -foreground -textforeground textForeground Foreground
    92         rename -disabledbackground -textbackground textBackground Background
    93         rename -disabledforeground -textforeground textForeground Foreground
    94         ignore -borderwidth -relief
     87        usual
     88        keep -width
     89        rename -highlightbackground -textbackground textBackground Background
     90        rename -background -textbackground textBackground Background
     91        rename -foreground -textforeground textForeground Foreground
     92        rename -disabledbackground -textbackground textBackground Background
     93        rename -disabledforeground -textforeground textForeground Foreground
     94        ignore -borderwidth -relief
    9595    }
    9696    pack $itk_component(entry) -side left -expand yes -fill both
    9797
    9898    bind $itk_component(entry) <KeyPress-Return> \
    99         [itcl::code $this _entry apply]
     99        [itcl::code $this _entry apply]
    100100    bind $itk_component(entry) <ButtonPress> \
    101         [itcl::code $this _entry click]
     101        [itcl::code $this _entry click]
    102102
    103103    itk_component add ddlist {
    104         Rappture::Dropdownlist $itk_component(button).ddlist \
    105             -postcommand [itcl::code $this _dropdown post] \
    106             -unpostcommand [itcl::code $this _dropdown unpost] \
     104        Rappture::Dropdownlist $itk_component(button).ddlist \
     105            -postcommand [itcl::code $this _dropdown post] \
     106            -unpostcommand [itcl::code $this _dropdown unpost] \
    107107    }
    108108
    109109    bind $itk_component(ddlist) <<DropdownlistSelect>> \
    110         [itcl::code $this _dropdown select]
     110        [itcl::code $this _dropdown select]
    111111
    112112    $itk_component(button) configure -command \
    113         [list $itk_component(ddlist) post $itk_component(hull) left]
     113        [list $itk_component(ddlist) post $itk_component(hull) left]
    114114
    115115    eval itk_initialize $args
     
    126126itcl::body Rappture::Combobox::value {args} {
    127127    if {[llength $args] == 1} {
    128         set newval [lindex $args 0]
    129 
    130         $itk_component(entry) configure -state normal
    131         $itk_component(entry) delete 0 end
    132         $itk_component(entry) insert 0 $newval
    133         if {!$itk_option(-editable)} {
    134             $itk_component(entry) configure -state disabled
    135         }
    136 
    137         after 10 [list catch [list event generate $itk_component(hull) <<Value>>]]
     128        set newval [lindex $args 0]
     129
     130        $itk_component(entry) configure -state normal
     131        $itk_component(entry) delete 0 end
     132        $itk_component(entry) insert 0 $newval
     133        if {!$itk_option(-editable)} {
     134            $itk_component(entry) configure -state disabled
     135        }
     136
     137        after 10 [list catch [list event generate $itk_component(hull) <<Value>>]]
    138138    } elseif {[llength $args] != 0} {
    139         error "wrong # args: should be \"value ?newval?\""
     139        error "wrong # args: should be \"value ?newval?\""
    140140    }
    141141    return [$itk_component(entry) get]
     
    152152itcl::body Rappture::Combobox::translate {value {defValue ""}} {
    153153    foreach {val label} [choices get -both] {
    154         if {$label == $value} {
    155             return $val
    156         }
     154        if {$label == $value} {
     155            return $val
     156        }
    157157    }
    158158    return $defValue
     
    166166itcl::body Rappture::Combobox::label { myValue } {
    167167    foreach {val label} [choices get -both] {
    168         if {$myValue == $val} {
    169             return $label
    170         }
     168        if {$myValue == $val} {
     169            return $label
     170        }
    171171    }
    172172    return ""
     
    182182    set value [translate $raw "badValue"]
    183183    if { $value != "badValue" } {
    184         return $value
     184        return $value
    185185    }
    186186    return $raw
     
    215215itcl::body Rappture::Combobox::_entry {option} {
    216216    switch -- $option {
    217         apply {
    218             if {$itk_option(-editable) && $itk_option(-state) == "normal"} {
    219                 event generate $itk_component(hull) <<Value>>
    220             }
    221         }
    222         click {
    223             if {!$itk_option(-editable) && $itk_option(-state) == "normal"} {
    224                 $itk_component(button) configure -relief sunken
    225                 update idletasks; after 100
    226                 $itk_component(button) configure -relief raised
    227 
    228                 $itk_component(ddlist) post $itk_component(hull) left
    229             }
    230         }
    231         default {
    232             error "bad option \"$option\": should be apply, click"
    233         }
     217        apply {
     218            if {$itk_option(-editable) && $itk_option(-state) == "normal"} {
     219                event generate $itk_component(hull) <<Value>>
     220            }
     221        }
     222        click {
     223            if {!$itk_option(-editable) && $itk_option(-state) == "normal"} {
     224                $itk_component(button) configure -relief sunken
     225                update idletasks; after 100
     226                $itk_component(button) configure -relief raised
     227
     228                $itk_component(ddlist) post $itk_component(hull) left
     229            }
     230        }
     231        default {
     232            error "bad option \"$option\": should be apply, click"
     233        }
    234234    }
    235235}
     
    248248itcl::body Rappture::Combobox::_dropdown {option} {
    249249    switch -- $option {
    250         post {
    251             set value [$itk_component(entry) get]
    252             set i [$itk_component(ddlist) index -label $value]
    253             if {$i >= 0} {
    254                 $itk_component(ddlist) select clear 0 end
    255                 $itk_component(ddlist) select set $i
    256             }
    257         }
    258         unpost {
    259             if {$itk_option(-editable)} {
    260                 focus $itk_component(entry)
    261             }
    262         }
    263         select {
    264             set val [$itk_component(ddlist) current -label]
    265             if {"" != $val} {
    266                 value $val
    267             }
    268         }
    269         default {
    270             error "bad option \"$option\": should be post, unpost, select"
    271         }
     250        post {
     251            set value [$itk_component(entry) get]
     252            set i [$itk_component(ddlist) index -label $value]
     253            if {$i >= 0} {
     254                $itk_component(ddlist) select clear 0 end
     255                $itk_component(ddlist) select set $i
     256            }
     257        }
     258        unpost {
     259            if {$itk_option(-editable)} {
     260                focus $itk_component(entry)
     261            }
     262        }
     263        select {
     264            set val [$itk_component(ddlist) current -label]
     265            if {"" != $val} {
     266                value $val
     267            }
     268        }
     269        default {
     270            error "bad option \"$option\": should be post, unpost, select"
     271        }
    272272    }
    273273}
     
    281281itcl::body Rappture::Combobox::_fixState {} {
    282282    if {$itk_option(-state) == "normal"} {
    283         $itk_component(button) configure -state normal
    284         $itk_component(entry) configure \
    285             -background $itk_option(-textbackground) \
    286             -foreground $itk_option(-textforeground) \
    287             -disabledbackground $itk_option(-textbackground) \
    288             -disabledforeground $itk_option(-textforeground)
     283        $itk_component(button) configure -state normal
     284        $itk_component(entry) configure \
     285            -background $itk_option(-textbackground) \
     286            -foreground $itk_option(-textforeground) \
     287            -disabledbackground $itk_option(-textbackground) \
     288            -disabledforeground $itk_option(-textforeground)
    289289    } else {
    290         $itk_component(button) configure -state disabled
    291         $itk_component(entry) configure \
    292             -background $itk_option(-disabledbackground) \
    293             -foreground $itk_option(-disabledforeground) \
    294             -disabledbackground $itk_option(-disabledbackground) \
    295             -disabledforeground $itk_option(-disabledforeground)
     290        $itk_component(button) configure -state disabled
     291        $itk_component(entry) configure \
     292            -background $itk_option(-disabledbackground) \
     293            -foreground $itk_option(-disabledforeground) \
     294            -disabledbackground $itk_option(-disabledbackground) \
     295            -disabledforeground $itk_option(-disabledforeground)
    296296    }
    297297
    298298    if {$itk_option(-editable)} {
    299         if {$itk_option(-state) == "normal"} {
    300             $itk_component(entry) configure -state normal
    301         } else {
    302             $itk_component(entry) configure -state disabled
    303         }
     299        if {$itk_option(-state) == "normal"} {
     300            $itk_component(entry) configure -state normal
     301        } else {
     302            $itk_component(entry) configure -state disabled
     303        }
    304304    } else {
    305         $itk_component(entry) configure -state disabled
     305        $itk_component(entry) configure -state disabled
    306306    }
    307307
    308308    if {!$itk_option(-editable) || $itk_option(-state) != "normal"} {
    309         # can't keep focus here -- move it along to the next widget
    310         if {[focus] == $itk_component(entry)} {
    311             focus [tk_focusNext [focus]]
    312         }
     309        # can't keep focus here -- move it along to the next widget
     310        if {[focus] == $itk_component(entry)} {
     311            focus [tk_focusNext [focus]]
     312        }
    313313    }
    314314}
     
    319319itcl::configbody Rappture::Combobox::editable {
    320320    if {![string is boolean -strict $itk_option(-editable)]} {
    321         error "bad value \"$itk_option(-editable)\": should be boolean"
     321        error "bad value \"$itk_option(-editable)\": should be boolean"
    322322    }
    323323    _fixState
     
    330330    set valid {normal disabled}
    331331    if {[lsearch -exact $valid $itk_option(-state)] < 0} {
    332         error "bad value \"$itk_option(-state)\": should be [join $valid {, }]"
     332        error "bad value \"$itk_option(-state)\": should be [join $valid {, }]"
    333333    }
    334334    _fixState
  • branches/blt4/gui/scripts/contourresult.tcl

    r1650 r1923  
    9494
    9595    foreach val {xmin xmax ymin ymax zmin zmax vmin vmax} {
    96         set _limits($val) ""
     96        set _limits($val) ""
    9797    }
    9898
    9999    itk_component add controls {
    100         frame $itk_interior.cntls
    101     } {
    102         usual
    103         rename -background -controlbackground controlBackground Background
     100        frame $itk_interior.cntls
     101    } {
     102        usual
     103        rename -background -controlbackground controlBackground Background
    104104    }
    105105    pack $itk_component(controls) -side right -fill y
    106106
    107107    itk_component add zoom {
    108         frame $itk_component(controls).zoom
    109     } {
    110         usual
    111         rename -background -controlbackground controlBackground Background
     108        frame $itk_component(controls).zoom
     109    } {
     110        usual
     111        rename -background -controlbackground controlBackground Background
    112112    }
    113113    pack $itk_component(zoom) -side top
    114114
    115115    itk_component add reset {
    116         button $itk_component(zoom).reset \
    117             -borderwidth 1 -padx 1 -pady 1 \
    118             -bitmap [Rappture::icon reset] \
    119             -command [itcl::code $this _zoom reset]
    120     } {
    121         usual
    122         ignore -borderwidth
    123         rename -highlightbackground -controlbackground controlBackground Background
     116        button $itk_component(zoom).reset \
     117            -borderwidth 1 -padx 1 -pady 1 \
     118            -bitmap [Rappture::icon reset] \
     119            -command [itcl::code $this _zoom reset]
     120    } {
     121        usual
     122        ignore -borderwidth
     123        rename -highlightbackground -controlbackground controlBackground Background
    124124    }
    125125    pack $itk_component(reset) -padx 4 -pady 4
     
    127127
    128128    itk_component add zoomin {
    129         button $itk_component(zoom).zin \
    130             -borderwidth 1 -padx 1 -pady 1 \
    131             -bitmap [Rappture::icon zoomin] \
    132             -command [itcl::code $this _zoom in]
    133     } {
    134         usual
    135         ignore -borderwidth
    136         rename -highlightbackground -controlbackground controlBackground Background
     129        button $itk_component(zoom).zin \
     130            -borderwidth 1 -padx 1 -pady 1 \
     131            -bitmap [Rappture::icon zoomin] \
     132            -command [itcl::code $this _zoom in]
     133    } {
     134        usual
     135        ignore -borderwidth
     136        rename -highlightbackground -controlbackground controlBackground Background
    137137    }
    138138    pack $itk_component(zoomin) -padx 4 -pady 4
     
    140140
    141141    itk_component add zoomout {
    142         button $itk_component(zoom).zout \
    143             -borderwidth 1 -padx 1 -pady 1 \
    144             -bitmap [Rappture::icon zoomout] \
    145             -command [itcl::code $this _zoom out]
    146     } {
    147         usual
    148         ignore -borderwidth
    149         rename -highlightbackground -controlbackground controlBackground Background
     142        button $itk_component(zoom).zout \
     143            -borderwidth 1 -padx 1 -pady 1 \
     144            -bitmap [Rappture::icon zoomout] \
     145            -command [itcl::code $this _zoom out]
     146    } {
     147        usual
     148        ignore -borderwidth
     149        rename -highlightbackground -controlbackground controlBackground Background
    150150    }
    151151    pack $itk_component(zoomout) -padx 4 -pady 4
     
    156156    #
    157157    itk_component add slicers {
    158         frame $itk_component(controls).slicers
    159     } {
    160         usual
    161         rename -background -controlbackground controlBackground Background
     158        frame $itk_component(controls).slicers
     159    } {
     160        usual
     161        rename -background -controlbackground controlBackground Background
    162162    }
    163163    pack $itk_component(slicers) -side bottom -padx 4 -pady 4
     
    168168    #
    169169    itk_component add xslice {
    170         label $itk_component(slicers).xslice \
    171             -borderwidth 1 -relief raised -padx 1 -pady 1 \
    172             -bitmap [Rappture::icon x]
    173     } {
    174         usual
    175         ignore -borderwidth
    176         rename -highlightbackground -controlbackground controlBackground Background
     170        label $itk_component(slicers).xslice \
     171            -borderwidth 1 -relief raised -padx 1 -pady 1 \
     172            -bitmap [Rappture::icon x]
     173    } {
     174        usual
     175        ignore -borderwidth
     176        rename -highlightbackground -controlbackground controlBackground Background
    177177    }
    178178    bind $itk_component(xslice) <ButtonPress> \
    179         [itcl::code $this _slice axis x toggle]
     179        [itcl::code $this _slice axis x toggle]
    180180    Rappture::Tooltip::for $itk_component(xslice) \
    181         "Toggle the X cut plane on/off"
     181        "Toggle the X cut plane on/off"
    182182    grid $itk_component(xslice) -row 0 -column 0 -sticky ew -padx 1
    183183
    184184    itk_component add xslicer {
    185         ::scale $itk_component(slicers).xval -from 100 -to 0 \
    186             -width 10 -orient vertical -showvalue off -state disabled \
    187             -borderwidth 1 -highlightthickness 0 \
    188             -command [itcl::code $this _slice move x]
    189     } {
    190         usual
    191         ignore -borderwidth
    192         ignore -highlightthickness
    193         rename -highlightbackground -controlbackground controlBackground Background
    194         rename -troughcolor -controldarkbackground controlDarkBackground Background
     185        ::scale $itk_component(slicers).xval -from 100 -to 0 \
     186            -width 10 -orient vertical -showvalue off -state disabled \
     187            -borderwidth 1 -highlightthickness 0 \
     188            -command [itcl::code $this _slice move x]
     189    } {
     190        usual
     191        ignore -borderwidth
     192        ignore -highlightthickness
     193        rename -highlightbackground -controlbackground controlBackground Background
     194        rename -troughcolor -controldarkbackground controlDarkBackground Background
    195195    }
    196196    grid $itk_component(xslicer) -row 1 -column 0 -padx 1
    197197    Rappture::Tooltip::for $itk_component(xslicer) \
    198         "@[itcl::code $this _slicertip x]"
     198        "@[itcl::code $this _slicertip x]"
    199199
    200200    #
     
    202202    #
    203203    itk_component add yslice {
    204         label $itk_component(slicers).yslice \
    205             -borderwidth 1 -relief raised -padx 1 -pady 1 \
    206             -bitmap [Rappture::icon y]
    207     } {
    208         usual
    209         ignore -borderwidth
    210         rename -highlightbackground -controlbackground controlBackground Background
     204        label $itk_component(slicers).yslice \
     205            -borderwidth 1 -relief raised -padx 1 -pady 1 \
     206            -bitmap [Rappture::icon y]
     207    } {
     208        usual
     209        ignore -borderwidth
     210        rename -highlightbackground -controlbackground controlBackground Background
    211211    }
    212212    bind $itk_component(yslice) <ButtonPress> \
    213         [itcl::code $this _slice axis y toggle]
     213        [itcl::code $this _slice axis y toggle]
    214214    Rappture::Tooltip::for $itk_component(yslice) \
    215         "Toggle the Y cut plane on/off"
     215        "Toggle the Y cut plane on/off"
    216216    grid $itk_component(yslice) -row 0 -column 1 -sticky ew -padx 1
    217217
    218218    itk_component add yslicer {
    219         ::scale $itk_component(slicers).yval -from 100 -to 0 \
    220             -width 10 -orient vertical -showvalue off -state disabled \
    221             -borderwidth 1 -highlightthickness 0 \
    222             -command [itcl::code $this _slice move y]
    223     } {
    224         usual
    225         ignore -borderwidth
    226         ignore -highlightthickness
    227         rename -highlightbackground -controlbackground controlBackground Background
    228         rename -troughcolor -controldarkbackground controlDarkBackground Background
     219        ::scale $itk_component(slicers).yval -from 100 -to 0 \
     220            -width 10 -orient vertical -showvalue off -state disabled \
     221            -borderwidth 1 -highlightthickness 0 \
     222            -command [itcl::code $this _slice move y]
     223    } {
     224        usual
     225        ignore -borderwidth
     226        ignore -highlightthickness
     227        rename -highlightbackground -controlbackground controlBackground Background
     228        rename -troughcolor -controldarkbackground controlDarkBackground Background
    229229    }
    230230    grid $itk_component(yslicer) -row 1 -column 1 -padx 1
    231231    Rappture::Tooltip::for $itk_component(yslicer) \
    232         "@[itcl::code $this _slicertip y]"
     232        "@[itcl::code $this _slicertip y]"
    233233
    234234    #
     
    236236    #
    237237    itk_component add zslice {
    238         label $itk_component(slicers).zslice \
    239             -borderwidth 1 -relief raised -padx 1 -pady 1 \
    240             -bitmap [Rappture::icon z]
    241     } {
    242         usual
    243         ignore -borderwidth
    244         rename -highlightbackground -controlbackground controlBackground Background
     238        label $itk_component(slicers).zslice \
     239            -borderwidth 1 -relief raised -padx 1 -pady 1 \
     240            -bitmap [Rappture::icon z]
     241    } {
     242        usual
     243        ignore -borderwidth
     244        rename -highlightbackground -controlbackground controlBackground Background
    245245    }
    246246    grid $itk_component(zslice) -row 0 -column 2 -sticky ew -padx 1
    247247    bind $itk_component(zslice) <ButtonPress> \
    248         [itcl::code $this _slice axis z toggle]
     248        [itcl::code $this _slice axis z toggle]
    249249    Rappture::Tooltip::for $itk_component(zslice) \
    250         "Toggle the Z cut plane on/off"
     250        "Toggle the Z cut plane on/off"
    251251
    252252    itk_component add zslicer {
    253         ::scale $itk_component(slicers).zval -from 100 -to 0 \
    254             -width 10 -orient vertical -showvalue off -state disabled \
    255             -borderwidth 1 -highlightthickness 0 \
    256             -command [itcl::code $this _slice move z]
    257     } {
    258         usual
    259         ignore -borderwidth
    260         ignore -highlightthickness
    261         rename -highlightbackground -controlbackground controlBackground Background
    262         rename -troughcolor -controldarkbackground controlDarkBackground Background
     253        ::scale $itk_component(slicers).zval -from 100 -to 0 \
     254            -width 10 -orient vertical -showvalue off -state disabled \
     255            -borderwidth 1 -highlightthickness 0 \
     256            -command [itcl::code $this _slice move z]
     257    } {
     258        usual
     259        ignore -borderwidth
     260        ignore -highlightthickness
     261        rename -highlightbackground -controlbackground controlBackground Background
     262        rename -troughcolor -controldarkbackground controlDarkBackground Background
    263263    }
    264264    grid $itk_component(zslicer) -row 1 -column 2 -padx 1
    265265    Rappture::Tooltip::for $itk_component(zslicer) \
    266         "@[itcl::code $this _slicertip z]"
     266        "@[itcl::code $this _slicertip z]"
    267267
    268268    #
     
    270270    #
    271271    itk_component add area {
    272         frame $itk_interior.area
     272        frame $itk_interior.area
    273273    }
    274274    pack $itk_component(area) -expand yes -fill both
     
    283283
    284284    itk_component add plot {
    285         vtkTkRenderWidget $itk_component(area).plot -rw $this-renWin \
    286             -width 1 -height 1
     285        vtkTkRenderWidget $itk_component(area).plot -rw $this-renWin \
     286            -width 1 -height 1
    287287    } {
    288288    }
     
    297297
    298298    itk_component add legend {
    299         vtkTkRenderWidget $itk_component(area).legend -rw $this-renWin2 \
    300             -width 1 -height 40
     299        vtkTkRenderWidget $itk_component(area).legend -rw $this-renWin2 \
     300            -width 1 -height 40
    301301    } {
    302302    }
     
    338338itcl::body Rappture::ContourResult::add {dataobj {settings ""}} {
    339339    array set params {
    340         -color auto
    341         -width 1
    342         -linestyle solid
    343         -brightness 0
    344         -raise 0
    345         -description ""
    346         -param ""
     340        -color auto
     341        -width 1
     342        -linestyle solid
     343        -brightness 0
     344        -raise 0
     345        -description ""
     346        -param ""
    347347    }
    348348    foreach {opt val} $settings {
    349         if {![info exists params($opt)]} {
    350             error "bad setting \"$opt\": should be [join [lsort [array names params]] {, }]"
    351         }
    352         set params($opt) $val
     349        if {![info exists params($opt)]} {
     350            error "bad setting \"$opt\": should be [join [lsort [array names params]] {, }]"
     351        }
     352        set params($opt) $val
    353353    }
    354354    if {$params(-color) == "auto" || $params(-color) == "autoreset"} {
    355         # can't handle -autocolors yet
    356         set params(-color) black
     355        # can't handle -autocolors yet
     356        set params(-color) black
    357357    }
    358358
    359359    set pos [lsearch -exact $dataobj $_dlist]
    360360    if {$pos < 0} {
    361         lappend _dlist $dataobj
    362         set _obj2color($dataobj) $params(-color)
    363         set _obj2width($dataobj) $params(-width)
    364         set _obj2raise($dataobj) $params(-raise)
    365 
    366         after cancel [itcl::code $this _rebuild]
    367         after idle [itcl::code $this _rebuild]
     361        lappend _dlist $dataobj
     362        set _obj2color($dataobj) $params(-color)
     363        set _obj2width($dataobj) $params(-width)
     364        set _obj2raise($dataobj) $params(-raise)
     365
     366        after cancel [itcl::code $this _rebuild]
     367        after idle [itcl::code $this _rebuild]
    368368    }
    369369}
     
    379379    set dlist $_dlist
    380380    foreach obj $dlist {
    381         if {[info exists _obj2raise($obj)] && $_obj2raise($obj)} {
    382             set i [lsearch -exact $dlist $obj]
    383             if {$i >= 0} {
    384                 set dlist [lreplace $dlist $i $i]
    385                 lappend dlist $obj
    386             }
    387         }
     381        if {[info exists _obj2raise($obj)] && $_obj2raise($obj)} {
     382            set i [lsearch -exact $dlist $obj]
     383            if {$i >= 0} {
     384                set dlist [lreplace $dlist $i $i]
     385                lappend dlist $obj
     386            }
     387        }
    388388    }
    389389    return $dlist
     
    398398itcl::body Rappture::ContourResult::delete {args} {
    399399    if {[llength $args] == 0} {
    400         set args $_dlist
     400        set args $_dlist
    401401    }
    402402
     
    404404    set changed 0
    405405    foreach dataobj $args {
    406         set pos [lsearch -exact $_dlist $dataobj]
    407         if {$pos >= 0} {
    408             set _dlist [lreplace $_dlist $pos $pos]
    409             catch {unset _obj2color($dataobj)}
    410             catch {unset _obj2width($dataobj)}
    411             catch {unset _obj2raise($dataobj)}
    412             set changed 1
    413         }
     406        set pos [lsearch -exact $_dlist $dataobj]
     407        if {$pos >= 0} {
     408            set _dlist [lreplace $_dlist $pos $pos]
     409            catch {unset _obj2color($dataobj)}
     410            catch {unset _obj2width($dataobj)}
     411            catch {unset _obj2raise($dataobj)}
     412            set changed 1
     413        }
    414414    }
    415415
    416416    # if anything changed, then rebuild the plot
    417417    if {$changed} {
    418         after cancel [itcl::code $this _rebuild]
    419         after idle [itcl::code $this _rebuild]
     418        after cancel [itcl::code $this _rebuild]
     419        after idle [itcl::code $this _rebuild]
    420420    }
    421421}
     
    432432itcl::body Rappture::ContourResult::scale {args} {
    433433    foreach val {xmin xmax ymin ymax zmin zmax vmin vmax} {
    434         set _limits($val) ""
     434        set _limits($val) ""
    435435    }
    436436    foreach obj $args {
    437         foreach axis {x y z v} {
    438             foreach {min max} [$obj limits $axis] break
    439             if {"" != $min && "" != $max} {
    440                 if {"" == $_limits(${axis}min)} {
    441                     set _limits(${axis}min) $min
    442                     set _limits(${axis}max) $max
    443                 } else {
    444                     if {$min < $_limits(${axis}min)} {
    445                         set _limits(${axis}min) $min
    446                     }
    447                     if {$max > $_limits(${axis}max)} {
    448                         set _limits(${axis}max) $max
    449                     }
    450                 }
    451             }
    452         }
     437        foreach axis {x y z v} {
     438            foreach {min max} [$obj limits $axis] break
     439            if {"" != $min && "" != $max} {
     440                if {"" == $_limits(${axis}min)} {
     441                    set _limits(${axis}min) $min
     442                    set _limits(${axis}max) $max
     443                } else {
     444                    if {$min < $_limits(${axis}min)} {
     445                        set _limits(${axis}min) $min
     446                    }
     447                    if {$max > $_limits(${axis}max)} {
     448                        set _limits(${axis}max) $max
     449                    }
     450                }
     451            }
     452        }
    453453    }
    454454    _fixLimits
     
    467467itcl::body Rappture::ContourResult::download {option args} {
    468468    switch $option {
    469         coming {
    470             if {[catch {$_download snap $itk_component(area)} errs] != 0 } {
    471                 global errorInfo
    472                 puts stderr "$errorInfo"
    473                 $_download blank #000000
    474             }
    475         }
    476         controls {
    477             # no controls for this download yet
    478             return ""
    479         }
    480         now {
    481             $_download export jpg -quality 100 -data bytes
    482             return [list .jpg $bytes]
    483         }
    484         default {
    485             error "bad option \"$option\": should be coming, controls, now"
    486         }
     469        coming {
     470            if {[catch {$_download snap $itk_component(area)} errs] != 0 } {
     471                global errorInfo
     472                puts stderr "$errorInfo"
     473                $_download blank #000000
     474            }
     475        }
     476        controls {
     477            # no controls for this download yet
     478            return ""
     479        }
     480        now {
     481            $_download export jpg -quality 100 -data bytes
     482            return [list .jpg $bytes]
     483        }
     484        default {
     485            error "bad option \"$option\": should be coming, controls, now"
     486        }
    487487    }
    488488}
     
    503503    set dataobj [lindex $dlist end]
    504504    if {$dataobj != ""} {
    505         set _dims [lindex [lsort [$dataobj components -dimensions]] end]
     505        set _dims [lindex [lsort [$dataobj components -dimensions]] end]
    506506    } else {
    507         set _dims "0D"
     507        set _dims "0D"
    508508    }
    509509
     
    513513    # use vmin/vmax if possible, otherwise get from data
    514514    if {$_limits(vmin) == "" || $_limits(vmax) == ""} {
    515         set v0 0
    516         set v1 1
    517         if {[info exists _obj2vtk($dataobj)]} {
    518             set pd [lindex $_obj2vtk($dataobj) 0]
    519             if {"" != $pd} {
    520                 foreach {v0 v1} [$pd GetScalarRange] break
    521             }
    522         }
     515        set v0 0
     516        set v1 1
     517        if {[info exists _obj2vtk($dataobj)]} {
     518            set pd [lindex $_obj2vtk($dataobj) 0]
     519            if {"" != $pd} {
     520                foreach {v0 v1} [$pd GetScalarRange] break
     521            }
     522        }
    523523    } else {
    524         set v0 $_limits(vmin)
    525         set v1 $_limits(vmax)
     524        set v0 $_limits(vmin)
     525        set v1 $_limits(vmax)
    526526    }
    527527
     
    535535
    536536    if {$_dims == "3D"} {
    537         #
    538         # 3D LIGHTS (on both sides of all three axes)
    539         #
    540         set x0 $_limits(xmin)
    541         set x1 $_limits(xmax)
    542         set xm [expr {0.5*($x0+$x1)}]
    543         set y0 $_limits(ymin)
    544         set y1 $_limits(ymax)
    545         set ym [expr {0.5*($y0+$y1)}]
    546         set z0 $_limits(zmin)
    547         set z1 $_limits(zmax)
    548         set zm [expr {0.5*($z0+$z1)}]
    549         set xr [expr {$x1-$x0}]
    550         set yr [expr {$y1-$y0}]
    551         set zr [expr {$z1-$z0}]
    552 
    553         set lt $this-light$id
    554         vtkLight $lt
    555         $lt SetColor 1 1 1
    556         $lt SetAttenuationValues 0 0 0
    557         $lt SetFocalPoint $xm $ym $zm
    558         $lt SetLightTypeToHeadlight
    559         $this-ren AddLight $lt
    560         lappend _lights($this-ren) $lt
     537        #
     538        # 3D LIGHTS (on both sides of all three axes)
     539        #
     540        set x0 $_limits(xmin)
     541        set x1 $_limits(xmax)
     542        set xm [expr {0.5*($x0+$x1)}]
     543        set y0 $_limits(ymin)
     544        set y1 $_limits(ymax)
     545        set ym [expr {0.5*($y0+$y1)}]
     546        set z0 $_limits(zmin)
     547        set z1 $_limits(zmax)
     548        set zm [expr {0.5*($z0+$z1)}]
     549        set xr [expr {$x1-$x0}]
     550        set yr [expr {$y1-$y0}]
     551        set zr [expr {$z1-$z0}]
     552
     553        set lt $this-light$id
     554        vtkLight $lt
     555        $lt SetColor 1 1 1
     556        $lt SetAttenuationValues 0 0 0
     557        $lt SetFocalPoint $xm $ym $zm
     558        $lt SetLightTypeToHeadlight
     559        $this-ren AddLight $lt
     560        lappend _lights($this-ren) $lt
    561561
    562562    } else {
     
    566566    set firstobj 1
    567567    foreach dataobj [get] {
    568         foreach comp [$dataobj components] {
    569             #
    570             # Add color contours.
    571             #
    572             if {$firstobj} {
    573                 if {$_dims == "3D"} {
    574                     pack $itk_component(slicers) -side bottom -padx 4 -pady 4
    575                     pack $itk_component(reset) -side left
    576                     pack $itk_component(zoomin) -side left
    577                     pack $itk_component(zoomout) -side left
    578 
    579                     #
    580                     # 3D DATA SET
    581                     #
    582                     set mesh [$dataobj mesh $comp]
    583                     if {"" == $mesh} {
    584                         set x [expr {[winfo rootx $itk_component(area)]+10}]
    585                         set y [expr {[winfo rooty $itk_component(area)]+10}]
    586                         Rappture::Tooltip::cue @$x,$y "This data requires the visualization server, and that appears to be down.  Please try your simulation again later."
    587                         return
    588                     }
    589                     switch -- [$mesh GetClassName] {
    590                       vtkPoints {
    591                         # handle cloud of 3D points
    592                         set pd $this-polydata$id
    593                         vtkPolyData $pd
    594                         $pd SetPoints $mesh
    595                         [$pd GetPointData] SetScalars [$dataobj values $comp]
    596 
    597                         set tr $this-triangles$id
    598                         vtkDelaunay3D $tr
    599                         $tr SetInput $pd
    600                         $tr SetTolerance 0.0000000000001
    601                         set source [$tr GetOutput]
    602 
    603                         set mp $this-mapper$id
    604                         vtkPolyDataMapper $mp
    605 
    606                         lappend _obj2vtk($dataobj) $pd $tr $mp
    607                       }
    608                       vtkUnstructuredGrid {
    609                         # handle 3D grid with connectivity
    610                         set gr $this-grdata$id
    611                         vtkUnstructuredGrid $gr
    612                         $gr ShallowCopy $mesh
    613                         [$gr GetPointData] SetScalars [$dataobj values $comp]
    614                         set source $gr
    615 
    616                         lappend _obj2vtk($dataobj) $gr
    617                       }
    618                       vtkRectilinearGrid {
    619                         # handle 3D grid with connectivity
    620                         set gr $this-grdata$id
    621                         vtkRectilinearGrid $gr
    622                         $gr ShallowCopy $mesh
    623                         [$gr GetPointData] SetScalars [$dataobj values $comp]
    624                         set source $gr
    625 
    626                         lappend _obj2vtk($dataobj) $gr
    627                       }
    628                       default {
    629                         error "don't know how to handle [$mesh GetClassName] data"
    630                       }
    631                     }
    632 
    633                     #
    634                     # 3D ISOSURFACES
    635                     #
    636                     set iso $this-iso$id
    637                     vtkContourFilter $iso
    638                       $iso SetInput $source
    639 
    640                     set mp $this-isomap$id
    641                     vtkPolyDataMapper $mp
    642                       $mp SetInput [$iso GetOutput]
    643 
    644                     set ac $this-isoactor$id
    645                     vtkActor $ac
    646                       $ac SetMapper $mp
    647                       [$ac GetProperty] SetOpacity 0.3
    648                       [$ac GetProperty] SetDiffuse 0.5
    649                       [$ac GetProperty] SetAmbient 0.7
    650                       [$ac GetProperty] SetSpecular 10.0
    651                       [$ac GetProperty] SetSpecularPower 200.0
    652                     $this-ren AddActor $ac
    653 
    654                     lappend _obj2vtk($dataobj) $iso $mp $ac
    655                     lappend _actors($this-ren) $ac
    656 
    657                     catch {unset style}
    658                     array set style [lindex [$dataobj components -style $comp] 0]
    659                     if {[info exists style(-color)]} {
    660                         $mp ScalarVisibilityOff  ;# take color from actor
    661                         eval [$ac GetProperty] SetColor [_color2rgb $style(-color)]
    662                     }
    663 
    664                     if {[info exists style(-opacity)]} {
    665                         [$ac GetProperty] SetOpacity $style(-opacity)
    666                     }
    667 
    668                     set levels 5
    669                     if {[info exists style(-levels)]} {
    670                         set levels $style(-levels)
    671                     }
    672                     if {$levels == 1} {
    673                         $iso SetValue 0 [expr {0.5*($v1-$v0)+$v0}]
    674                     } else {
    675                         $iso GenerateValues [expr {$levels+2}] $v0 $v1
    676                     }
    677 
    678                     #
    679                     # 3D CUT PLANES
    680                     #
    681                     if {$id == 0} {
    682                         foreach axis {x y z} norm {{1 0 0} {0 1 0} {0 0 1}} {
    683                             set pl $this-${axis}cutplane$id
    684                             vtkPlane $pl
    685                             eval $pl SetNormal $norm
    686                             set _slicer(${axis}plane) $pl
    687 
    688                             set ct $this-${axis}cutter$id
    689                             vtkCutter $ct
    690                             $ct SetInput $source
    691                             $ct SetCutFunction $pl
    692 
    693                             set mp $this-${axis}cutmapper$id
    694                             vtkPolyDataMapper $mp
    695                             $mp SetInput [$ct GetOutput]
    696                             $mp SetScalarRange $v0 $v1
    697                             $mp SetLookupTable $lu
    698 
    699                             lappend _obj2vtk($dataobj) $pl $ct $mp
    700 
    701                             set ac $this-${axis}actor$id
    702                             vtkActor $ac
    703                             $ac VisibilityOff
    704                             $ac SetMapper $mp
    705                             $ac SetPosition 0 0 0
    706                             [$ac GetProperty] SetColor 0 0 0
    707                             set _slicer(${axis}slice) $ac
    708 
    709                             $this-ren AddActor $ac
    710                             lappend _actors($this-ren) $ac
    711                             lappend _obj2vtk($dataobj) $ac
    712                         }
    713 
    714                         #
    715                         # CUT PLANE READOUT
    716                         #
    717                         set tx $this-text$id
    718                         vtkTextMapper $tx
    719                         set tp [$tx GetTextProperty]
    720                         eval $tp SetColor [_color2rgb $itk_option(-plotforeground)]
    721                         $tp SetVerticalJustificationToTop
    722                         set _slicer(readout) $tx
    723 
    724                         set txa $this-texta$id
    725                         vtkActor2D $txa
    726                         $txa SetMapper $tx
    727                         [$txa GetPositionCoordinate] \
    728                             SetCoordinateSystemToNormalizedDisplay
    729                         [$txa GetPositionCoordinate] SetValue 0.02 0.98
    730 
    731                         $this-ren AddActor $txa
    732                         lappend _actors($this-ren) $txa
    733 
    734                         lappend _obj2vtk($dataobj) $tx $txa
    735 
    736                         # turn off all slicers by default
    737                         foreach axis {x y z} {
    738                             $itk_component(${axis}slicer) configure -state normal
    739                             $itk_component(${axis}slicer) set 50
    740                             _slice move $axis 50
    741                             _slice axis $axis off
    742                         }
    743                     }
    744 
    745                 } else {
    746                     pack forget $itk_component(slicers)
    747                     pack $itk_component(reset) -side top
    748                     pack $itk_component(zoomin) -side top
    749                     pack $itk_component(zoomout) -side top
    750 
    751                     set pd $this-polydata$id
    752                     vtkPolyData $pd
    753                     $pd SetPoints [$dataobj mesh $comp]
    754                     [$pd GetPointData] SetScalars [$dataobj values $comp]
    755 
    756                     set tr $this-triangles$id
    757                     vtkDelaunay2D $tr
    758                     $tr SetInput $pd
    759                     $tr SetTolerance 0.0000000000001
    760                     set source [$tr GetOutput]
    761 
    762                     set mp $this-mapper$id
    763                     vtkPolyDataMapper $mp
    764                     $mp SetInput $source
    765                     $mp SetScalarRange $v0 $v1
    766                     $mp SetLookupTable $lu
    767 
    768                     set ac $this-actor$id
    769                     vtkActor $ac
    770                     $ac SetMapper $mp
    771                     $ac SetPosition 0 0 0
    772                     [$ac GetProperty] SetColor 0 0 0
    773                     $this-ren AddActor $ac
    774                     lappend _actors($this-ren) $ac
    775 
    776                     lappend _obj2vtk($dataobj) $pd $tr $mp $ac
    777                 }
    778             } else {
    779                 #
    780                 # Add color lines
    781                 #
    782                 set cf $this-clfilter$id
    783                 vtkContourFilter $cf
    784                 $cf SetInput $source
    785                 $cf GenerateValues 20 $v0 $v1
    786 
    787                 set mp $this-clmapper$id
    788                 vtkPolyDataMapper $mp
    789                 $mp SetInput [$cf GetOutput]
    790                 $mp SetScalarRange $v0 $v1
    791                 $mp SetLookupTable $lu
    792 
    793                 set ac $this-clactor$id
    794                 vtkActor $ac
    795                 $ac SetMapper $mp
    796                 [$ac GetProperty] SetColor 1 1 1
    797                 $ac SetPosition 0 0 0
    798                 $this-ren AddActor $ac
    799                 lappend _actors($this-ren) $ac
    800 
    801                 lappend _obj2vtk($dataobj) $cf $mp $ac
    802             }
    803 
    804             #
    805             # Add an outline around the data
    806             #
    807             if {$id == 0} {
    808                 set olf $this-olfilter$id
    809                 vtkOutlineFilter $olf
    810                 $olf SetInput $source
    811 
    812                 set olm $this-olmapper$id
    813                 vtkPolyDataMapper $olm
    814                 $olm SetInput [$olf GetOutput]
    815 
    816                 set ola $this-olactor$id
    817                 vtkActor $ola
    818                 $ola SetMapper $olm
    819                 eval [$ola GetProperty] SetColor [_color2rgb $itk_option(-plotforeground)]
    820                 $this-ren AddActor $ola
    821                 lappend _actors($this-ren) $ola
    822 
    823                 lappend _obj2vtk($dataobj) $olf $olm $ola
    824 
    825                 if {$_dims == "3D"} {
    826                     # pick a good scale factor for text
    827                     if {$xr < $yr} {
    828                         set tscale [expr {0.1*$xr}]
    829                     } else {
    830                         set tscale [expr {0.1*$yr}]
    831                     }
    832 
    833                     foreach {i axis px py pz rx ry rz} {
    834                         0  x   $xm   0   0   90   0   0
    835                         1  y     0 $ym   0   90 -90   0
    836                         2  z   $x1   0 $zm   90   0 -45
    837                     } {
    838                         set length "[expr {[set ${axis}1]-[set ${axis}0]}]"
    839 
    840                         set vtx $this-${axis}label$id
    841                         vtkVectorText $vtx
    842                         $vtx SetText "$axis"
    843 
    844                         set vmp $this-${axis}lmap$id
    845                         vtkPolyDataMapper $vmp
    846                         $vmp SetInput [$vtx GetOutput]
    847 
    848                         set vac $this-${axis}lact$id
    849                         vtkActor $vac
    850                         $vac SetMapper $vmp
    851                         $vac SetPosition [expr $px] [expr $py] [expr $pz]
    852                         $vac SetOrientation $rx $ry $rz
    853                         $vac SetScale $tscale
    854                         $this-ren AddActor $vac
    855 
    856                         lappend _obj2vtk($dataobj) $vtx $vmp $vac
    857