aboutsummaryrefslogtreecommitdiff
path: root/test/toxy/multiscale.wid
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}