proc ::toxy::multiscale_command {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 cvpath target remote count lo hi res 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 $hi -to $lo -resolution $res \ -bg $bg -highlightthickness 0 \ -command [concat ::toxy::multiscale_command $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::subwidget $path.s$ndx $path $cvpath $target incr px $dx } } } #> multiscale canvas # FIXME fractional resolution: scalePtr->value == value fails in TkScaleSetValue #. #n 3 #lo 0 #hi 100 #res 1 #. #dx 60 #dy 90 #. #bg yellow #. @float ::toxy::multiscale_float .- .| .#n .#1 #. @list ::toxy::multiscale_list .- .#n .#2 .#1 ::toxy::multiscale .- .^.c .| . .#n .#lo .#hi .#res .#dx .#dy .#bg