proc ::toxy::multiscalecommand {target sel ndx v} { pd [concat $target $sel $v $ndx \;] } proc ::toxy::multiscale_float {path target count ndx} { if {$ndx >= 0 && $ndx < $count} { pd [concat $target _cb [$path.s$ndx get] $ndx \;] } } proc ::toxy::multiscale_list {path count ndx v} { if {$ndx >= 0 && $ndx < $count} { $path.s$ndx set $v } } proc ::toxy::multiscale {path target remote count dx dy bg} { if {[winfo exists $path.s0]} { # puts stderr [concat $path.s0 exists] } else { set width [expr {$count * $dx + 10}] set height [expr {$dy + 10}] $path config -width $width -height $height -bg $bg set px 5 set py 5 for {set ndx 0} {$ndx < $count} {incr ndx} { scale $path.s$ndx -width $dx -length $dy \ -from 1 -to 0 -resolution 0.01 \ -bg $bg -highlightthickness 0 \ -command [concat ::toxy::multiscalecommand $target _cb $ndx] if {$dx < 50} { $path.s$ndx config -showvalue 0 -relief flat } else { $path.s$ndx config -digits 3 -relief sunken } set id [$path create window $px $py -width $dx -height $dy \ -anchor nw -window $path.s$ndx -tags $path.s$ndx] ::toxy::masterinit $path.s$ndx $target $path incr px $dx } } } #> multiscale canvas #. #n 3 #dx 60 #dy 90 #. #bg yellow #. @float ::toxy::multiscale_float .- .| .#n .#1 #. @list ::toxy::multiscale_list .- .#n .#2 .#1 ::toxy::multiscale .- .| . .#n .#dx .#dy .#bg # undo the "bind Canvas <1> {+focus %W}" in the setup part above bind .- {focus .^.c}