diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2016-10-27 19:01:15 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2016-10-27 19:01:15 (GMT) |
commit | 12166aa342f7c8d905097e43a1f50e0775503069 (patch) | |
tree | 73a6e7296fbf9898633a02c2503a3e959789d8c3 /ds9/library/slider.tcl | |
parent | d4d595fa7fb12903db9227d33d48b2b00120dbd1 (diff) | |
download | blt-12166aa342f7c8d905097e43a1f50e0775503069.zip blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.gz blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.bz2 |
Initial commit
Diffstat (limited to 'ds9/library/slider.tcl')
-rw-r--r-- | ds9/library/slider.tcl | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/ds9/library/slider.tcl b/ds9/library/slider.tcl new file mode 100644 index 0000000..2453ecd --- /dev/null +++ b/ds9/library/slider.tcl @@ -0,0 +1,72 @@ +# Copyright (C) 1999-2016 +# Smithsonian Astrophysical Observatory, Cambridge, MA, USA +# For conditions of distribution and use, see copyright notice in "copyright" + +package provide DS9 1.0 + +proc slider {w from to label varname cmd {num {5}} {width {7}}} { + ttk::frame $w + ttk::scale $w.slider \ + -length 300 \ + -orient horizontal \ + -variable $varname \ + -takefocus 0 \ + -command [list SliderCmd $w $varname $cmd] + + ttk::label $w.label -text $label + ttk::entry $w.entry -textvariable $varname -width $width + grid $w.label -sticky w -columnspan $num + grid $w.slider -row 1 -columnspan $num -padx 2 -pady 2 -sticky news + grid $w.entry -row 1 -column $num -padx 2 -pady 2 + + for {set ii 0} {$ii<$num} {incr ii} { + ttk::label $w.t$ii -width $width -anchor center + grid $w.t$ii -row 2 -column $ii + grid columnconfigure $w $ii -weight 1 + } + + grid rowconfigure $w 1 -weight 1 + grid columnconfigure $w 0 -weight 1 + grid rowconfigure $w 2 -weight 1 + + bind $w.entry <Return> $cmd + + SliderMinMax $w $from $to $num + + return $w +} + +proc SliderMinMax {w from to num} { + $w.slider configure -from $from -to $to + + if {$from == $to} { + for {set ii 0} {$ii<$num} {incr ii} { + $w.t$ii configure -text {} + } + } else { + for {set ii 0} {$ii<$num} {incr ii} { + set vv [expr ($to*1.-$from)/($num-1)*$ii + $from] + + if {[string is integer $from] && [string is integer $to]} { + set vv [expr int($vv)] + } else { + set vv [format {%.5g} $vv] + } + $w.t$ii configure -text $vv + } + } +} + +proc SliderCmd {w varname cmd vv} { + upvar $varname var + + set from [$w.slider cget -from] + set to [$w.slider cget -to] + + if {[string is integer $from] && [string is integer $to]} { + set var [expr int($vv)] + } + if {$cmd != {}} { + eval $cmd + } +} |