Annotation of micropolis/src/tk/library/demos/mkDialog.tcl, revision 1.1.1.1

1.1       root        1: # mkDialog w msgArgs list list ...
                      2: #
                      3: # Create a dialog box with a message and any number of buttons at
                      4: # the bottom.
                      5: #
                      6: # Arguments:
                      7: #    w -       Name to use for new top-level window.
                      8: #    msgArgs - List of arguments to use when creating the message of the
                      9: #              dialog box (e.g. text, justifcation, etc.)
                     10: #    list -    A two-element list that describes one of the buttons that
                     11: #              will appear at the bottom of the dialog.  The first element
                     12: #              gives the text to be displayed in the button and the second
                     13: #              gives the command to be invoked when the button is invoked.
                     14: 
                     15: proc mkDialog {w msgArgs args} {
                     16:     catch {destroy $w}
                     17:     toplevel $w -class Dialog
                     18:     wm title $w "Dialog box"
                     19:     wm iconname $w "Dialog"
                     20: 
                     21:     # Create two frames in the main window. The top frame will hold the
                     22:     # message and the bottom one will hold the buttons.  Arrange them
                     23:     # one above the other, with any extra vertical space split between
                     24:     # them.
                     25: 
                     26:     frame $w.top -relief raised -border 1
                     27:     frame $w.bot -relief raised -border 1
                     28:     pack append $w $w.top {top fill expand} $w.bot {top fill expand}
                     29:     
                     30:     # Create the message widget and arrange for it to be centered in the
                     31:     # top frame.
                     32:     
                     33:     eval message $w.top.msg -justify center \
                     34:            -font -Adobe-times-medium-r-normal--*-180* $msgArgs
                     35:     pack append $w.top $w.top.msg {top expand padx 5 pady 5}
                     36:     
                     37:     # Create as many buttons as needed and arrange them from left to right
                     38:     # in the bottom frame.  Embed the left button in an additional sunken
                     39:     # frame to indicate that it is the default button, and arrange for that
                     40:     # button to be invoked as the default action for clicks and returns in
                     41:     # the dialog.
                     42: 
                     43:     if {[llength $args] > 0} {
                     44:        set arg [lindex $args 0]
                     45:        frame $w.bot.0 -relief sunken -border 1
                     46:        pack append $w.bot $w.bot.0 {left expand padx 20 pady 20}
                     47:        button $w.bot.0.button -text [lindex $arg 0] \
                     48:                -command "[lindex $arg 1]; destroy $w"
                     49:        pack append $w.bot.0 $w.bot.0.button {expand padx 12 pady 12}
                     50:        bind $w <Return> "[lindex $arg 1]; destroy $w"
                     51:        focus $w
                     52: 
                     53:        set i 1
                     54:        foreach arg [lrange $args 1 end] {
                     55:            button $w.bot.$i -text [lindex $arg 0] \
                     56:                    -command "[lindex $arg 1]; destroy $w"
                     57:            pack append $w.bot $w.bot.$i {left expand padx 20}
                     58:            set i [expr $i+1]
                     59:        }
                     60:     }
                     61:     bind $w <Any-Enter> [list focus $w]
                     62:     focus $w
                     63: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.