summaryrefslogtreecommitdiffstats
path: root/ds9/library/slider.tcl
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:01:15 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:01:15 (GMT)
commit12166aa342f7c8d905097e43a1f50e0775503069 (patch)
tree73a6e7296fbf9898633a02c2503a3e959789d8c3 /ds9/library/slider.tcl
parentd4d595fa7fb12903db9227d33d48b2b00120dbd1 (diff)
downloadblt-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.tcl72
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
+ }
+}