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

  1. #
  2. # Example 29-7
  3. # Defining menus from resource specifications.
  4. #
  5.  
  6. proc Resource_Menubar { f class } {
  7.     set f [frame $f -class $class]
  8.     pack $f -side top
  9.     foreach b [option get $f menulist {}] {
  10.         set cmd [list menubutton $f.$b -menu $f.$b.m \
  11.                         -relief raised]
  12.         if [catch $cmd t] {
  13.             eval $cmd {-font fixed}
  14.         }
  15.         if [catch {menu $f.$b.m}] {
  16.             menu $f.$b.m -font fixed
  17.         }
  18.         pack $f.$b -side left
  19.         ResourceMenu $f.$b.m
  20.     }
  21. }
  22. proc ResourceMenu { menu } {
  23.     foreach e [option get $menu entrylist {}] {
  24.         set l [option get $menu l_$e {}]
  25.         set c [option get $menu c_$e {}]
  26.         set v [option get $menu v_$e {}]
  27.         switch -- [option get $menu t_$e {}] {
  28.             check {
  29.                 $menu add checkbutton -label $l -command $c \
  30.                     -variable $v
  31.             }
  32.             radio {
  33.                 $menu add radiobutton -label $l -command $c \
  34.                     -variable $v -value $l
  35.             }
  36.             separator {
  37.                 $menu add separator
  38.             }
  39.             cascade {
  40.                 set sub [option get $menu m_$e {}]
  41.                 if {[string length $sub] != 0} {
  42.                     set submenu [menu $menu.$sub]
  43.                     $menu add cascade -label $l -command $c \
  44.                              -menu $submenu
  45.                     ResourceMenu $submenu
  46.                 }
  47.             }
  48.             default {
  49.                 $menu add command -label $l -command $c
  50.             }
  51.         }
  52.     }
  53. }
  54.  
  55.  
  56.