home *** CD-ROM | disk | FTP | other *** search
- #
- #
- # Make the menus and menu bars
- #
- #
- proc MakeMenubar {name menuString} {
- global raised bd
- frame $name -relief $raised -bd $bd
- foreach item $menuString {
- set kind [lindex $item 0]
- set buttonName "[lindex $item 1]"
- case $kind in \
- "button" {MakeButton $name.$buttonName \
- "[lindex $item 2]" "[lindex $item 3]" } \
- "menu" {MakeMenu $name.$buttonName \
- "[lindex $item 2]" "[lindex $item 3]" }
- pack append $name $name.$buttonName {left fill}
- }
- }
-
- proc MakeButton {name text cmd} {
- global raised bd
- button $name -text "$text" -relief $raised -bd $bd
- bind $name <Any-Enter> {global insideButton;set insideButton 1}
- bind $name <Any-Leave> {global insideButton;set insideButton 0}
- bind $name <Any-ButtonRelease-1> "+execButton $name \{[lindex $cmd 0]\}"
- bind $name <Any-ButtonRelease-2> "execButton $name \{[lindex $cmd 1]\}"
- bind $name <Any-ButtonRelease-3> "execButton $name \{[lindex $cmd 2]\}"
- }
-
- proc MakeMenuItems {name menuString} {
- set n 0
- foreach item $menuString {
- set kind [lindex $item 0]
- case $kind in {
- "cascade" {
- $name add cascade -label [lindex $item 1] \
- -menu $name.$n
- menu $name.$n
- bind.menu $name.$n
- if {[llength [lindex $item 2]]==1} then {
- set m [lindex $item 2]
- global $m
- MakeMenuItems $name.$n [set $m]
- } else {
- MakeMenuItems $name.$n [lindex $item 2]
- }
- }
- "separator" { $name add separator }
- "command" {MakeCommand $name \
- [lindex $item 1] [lindex $item 2] }
- "check" {MakeCheck $name $n \
- [lindex $item 1] [lindex $item 2] [lindex $item 3] }
- "radio" {MakeRadio $name $n \
- [lindex $item 1] [lindex $item 2] \
- [lindex $item 3] [lindex $item 4] }
- }
- if "[string compare $kind "separator"] != 0" \
- {set n [expr $n+1]}
- }
- }
-
- proc MakeCommand {name text cmd} {
- $name add command -label "$text" -command "$cmd"
- }
-
- proc MakeCheck {name index text variable cmd} {
- global $variable
- $name add checkbutton -label "$text" -variable $variable \
- -command "$cmd"
- set xx [Option get $variable]
- if {$xx!=[set $variable]} {catch {$name invoke $index}}
- }
-
- proc MakeRadio {name index text variable value cmd} {
- global $variable
- $name add radio -label "$text" -variable $variable -value $value \
- -command $cmd
- if ![string compare "[Option get $variable]" "$value"] {
- catch {$name invoke $index}
- }
- }
-
- proc MakeMenu {name text menuString} {
- global raised bd
- global menuBarButton
- menubutton $name -text $text -relief $raised -bd $bd -menu $name.m
- menu $name.m
- bind $name <Any-Enter> "set postedMenu {};$name activate"
- bind $name <Any-B1-Enter> "set menuBarButton 1;$name activate; $name post"
- bind $name <Any-B3-Enter> "set menuBarButton 3;$name activate; $name post"
- bind $name <Any-B1-Leave> "$name deactivate"
- bind $name <Any-B3-Leave> "$name deactivate"
- bind $name <Shift-B1-Leave> "$name deactivate"
- bind $name <Shift-B3-Leave> "$name deactivate"
- bind $name <Any-Leave> "$name deactivate"
- bind $name <Any-1> "set menuBarButton 1;$name post"
- bind $name <Any-3> "set menuBarButton 3;$name post"
- bind $name <Shift-1> "set menuBarButton 1;$name.m post %X %Y"
- bind $name <Shift-3> "set menuBarButton 3;$name.m post %X %Y"
- bind $name <Any-ButtonRelease-1> "$name unpost"
- bind $name <Any-ButtonRelease-3> "$name unpost"
- bind $name <Shift-B1-Motion> "set menuBarButton 1;$name.m post %X %Y"
- bind $name <Shift-B3-Motion> "set menuBarButton 1;$name.m post %X %Y"
- global $menuString
- MakeMenuItems $name.m [set $menuString]
- bind.menu $name.m
- }
-
-