home *** CD-ROM | disk | FTP | other *** search
/ Practical Programming in Tcl & Tk (4th Edition) / TCLBOOK4.BIN / pc / exsource / 37_3.tcl < prev    next >
Text File  |  2003-04-16  |  2KB  |  57 lines

  1. #
  2. # Example 37-3
  3. # A min max scale canvas example.
  4. #
  5.  
  6. proc Scale2 {w min max {width {}} } {
  7.     global scale2
  8.     if {$width == {}} {
  9.         # Set the long dimension, in pixels
  10.         set width [expr $max - $min]
  11.     }
  12.     # Save parameters
  13.     set scale2($w,scale) [expr ($max-$min)/$width.0]
  14.     set scale2($w,min) $min                        ;# Current minimum
  15.     set scale2($w,max) $max
  16.     set scale2($w,Min) $min                            ;# Lower bound to the scale
  17.     set scale2($w,Max) $max
  18.     set scale2($w,L) 10    
  19.     set scale2($w,R) [expr $width+10]
  20.  
  21.     # Build from 0 to 100, then scale and move it later.
  22.     # Distance between left edges of boxes is 100.
  23.     # The box is 10 wide, therefore the slider is 110 long.
  24.     # The left box sticks up, and the right one hangs down.
  25.  
  26.     canvas $w
  27.     $w create rect 0 0 110 10 -fill grey -tag slider
  28.     $w create rect 0 -4 10 10 -fill black -tag {left lbox}
  29.     $w create rect 100 0 110 14 -fill red -tag {right rbox}
  30.     $w create text 5 16 -anchor n -text $min -tag {left lnum}
  31.     $w create text 105 16 -anchor n -text $max \
  32.         -tag {right rnum} -fill red
  33.  
  34.     # Stretch/shrink the slider to the right length
  35.     set scale [expr ($width+10) / 110.0]
  36.     $w scale slider 0 0 $scale 1.0
  37.  
  38.     # move the right box and text to match new length
  39.     set nx [lindex [$w coords slider] 2]
  40.     $w move right [expr $nx-110] 0
  41.     # Move everything into view
  42.     $w move all 10 10
  43.  
  44.     # Make the canvas fit comfortably around the image
  45.     set bbox [$w bbox all]
  46.     set height [expr [lindex $bbox 3]+4]
  47.     $w config -height $height -width [expr $width+30]
  48.  
  49.     # Bind drag actions
  50.     $w bind left <Button-1> {Scale2Mark %W %x lbox}
  51.     $w bind right <Button-1> {Scale2Mark %W %x rbox}
  52.     $w bind left <B1-Motion> {Scale2Drag %W %x lbox}
  53.     $w bind right <B1-Motion> {Scale2Drag %W %x rbox}
  54. }
  55.  
  56.  
  57.