aboutsummaryrefslogtreecommitdiff
path: root/test/toxy/multiscale.wid
blob: 18f56031ffb70ee09261139eb67d239eab3a4cef (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
54
55
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::master $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

# undo the "bind Canvas <1> {+focus %W}" from the setup.wid
bind .- <FocusIn> {focus .^.c}