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

  1. #
  2. # Example 35-4
  3. # Moving the markers for the min max scale.
  4. #
  5.  
  6. proc Scale2Mark { w x what } {
  7.     global scale2
  8.     # Remember the anchor point for the drag
  9.     set scale2($w,$what) $x
  10. }
  11. proc Scale2Drag { w x what } {
  12.     global scale2
  13.  
  14.     # Compute delta and update anchor point
  15.     set x1 $scale2($w,$what)
  16.     set scale2($w,$what) $x
  17.     set dx [expr $x - $x1]
  18.  
  19.     # Find out where the boxes are currently
  20.     set rx [lindex [$w coords rbox] 0]
  21.     set lx [lindex [$w coords lbox] 0]
  22.  
  23.     if {$what == "lbox"} {
  24.         # Constrain the movement to be between the
  25.         # left edge and the right marker.
  26.         if {$lx + $dx > $rx} {
  27.             set dx [expr $rx - $lx]
  28.             set scale2($w,$what) $rx
  29.         } elseif {$lx + $dx < $scale2($w,L)} {
  30.             set dx [expr $scale2($w,L) - $lx]
  31.             set scale2($w,$what) $scale2($w,L)
  32.         }
  33.         $w move left $dx 0
  34.  
  35.         # Update the minimum value and the hanging text
  36.         set lx [lindex [$w coords lbox] 0]
  37.         set scale2($w,min) [expr int($scale2($w,Min) + \
  38.             ($lx-$scale2($w,L)) * $scale2($w,scale))]
  39.         $w itemconfigure lnum -text $scale2($w,min)
  40.     } else {
  41.         # Constrain the movement to be between the
  42.         # right edge and the left marker
  43.         if {$rx + $dx < $lx} {
  44.             set dx [expr $lx - $rx]
  45.             set scale2($w,$what) $lx
  46.         } elseif {$rx + $dx > $scale2($w,R)} {
  47.             set dx [expr $scale2($w,R) - $rx]
  48.             set scale2($w,$what) $scale2($w,R)
  49.         }
  50.         $w move right $dx 0
  51.  
  52.         # Update the maximum value and the hanging text
  53.         set rx [lindex [$w coords right] 0]
  54.         set scale2($w,max) [expr int($scale2($w,Min) + \
  55.             ($rx-$scale2($w,L)) * $scale2($w,scale))]
  56.         $w itemconfigure rnum -text $scale2($w,max)
  57.     }
  58. }
  59. proc Scale2Value {w} {
  60.     global scale2
  61.     # Return the current values of the double slider
  62.     return [list $scale2($w,min) $scale2($w,max)]
  63. }
  64.  
  65.  
  66.