blob: be56d2bfd138e9abf7da84769556ab383a78ec58 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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 .- <FocusIn> {focus .^.c}
|