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

  1. #
  2. # Example 45-6
  3. # Interface objects for different preference types.
  4. #
  5.  
  6. proc PrefDialogItem { frame item width } {
  7.     global pref
  8.     incr pref(uid)
  9.     set f [frame $frame.p$pref(uid) -borderwidth 2]
  10.     pack $f -fill x
  11.     label $f.label -text [PrefComment $item] -width $width
  12.     bind $f.label <1> \
  13.         [list PrefItemHelp %X %Y [PrefHelp $item]]
  14.     pack $f.label -side left
  15.     set default [PrefDefault $item]
  16.     if {[regexp "^CHOICE " $default]} {
  17.         foreach choice [lreplace $default 0 0] {
  18.             incr pref(uid)
  19.             radiobutton $f.c$pref(uid) -text $choice \
  20.                 -variable [PrefVar $item] -value $choice
  21.             pack $f.c$pref(uid) -side left
  22.         }
  23.     } else {
  24.         if {$default == "OFF" || $default == "ON"} {
  25.             # This is a boolean
  26.             set varName [PrefVar $item]
  27.             checkbutton $f.check -variable $varName \
  28.                 -command [list PrefFixupBoolean $f.check $varName]
  29.             PrefFixupBoolean $f.check $varName
  30.             pack $f.check -side left
  31.         } else {
  32.             # This is a string or numeric
  33.             entry $f.entry -width 10 -relief sunken
  34.             pack $f.entry -side left -fill x -expand true
  35.             set pref(entry,[PrefVar $item]) $f.entry
  36.             set varName [PrefVar $item]
  37.             $f.entry insert 0 [uplevel #0 [list set $varName]]
  38.             bind $f.entry <Return> "PrefEntrySet %W $varName"
  39.         }
  40.     }
  41. }
  42. proc PrefFixupBoolean {check varname} {
  43.     upvar #0 $varname var
  44.     # Update the checkbutton text each time it changes
  45.     if {$var} {
  46.         $check config -text On
  47.     } else {
  48.         $check config -text Off
  49.     }
  50. }
  51. proc PrefEntrySet { entry varName } {
  52.     PrefValueSet $varName [$entry get]
  53. }
  54.  
  55.  
  56.