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

1.1       root        1: # tk.tcl --
                      2: #
                      3: # Initialization script normally executed in the interpreter for each
                      4: # Tk-based application.  Arranges class bindings for widgets.
                      5: #
                      6: # $Header: /user6/ouster/wish/scripts/RCS/tk.tcl,v 1.19 92/08/08 14:50:08 ouster Exp $ SPRITE (Berkeley)
                      7: #
                      8: # Copyright 1992 Regents of the University of California
                      9: # Permission to use, copy, modify, and distribute this
                     10: # software and its documentation for any purpose and without
                     11: # fee is hereby granted, provided that this copyright
                     12: # notice appears in all copies.  The University of California
                     13: # makes no representations about the suitability of this
                     14: # software for any purpose.  It is provided "as is" without
                     15: # express or implied warranty.
                     16: 
                     17: # Insist on running with a compatible version of Tcl.
                     18: 
                     19: if "[info tclversion] != {6.4}" {
                     20:     error "wrong version of Tcl loaded ([info tclversion]): need 6.4"
                     21: }
                     22: 
                     23: # Initialize the auto-load path to include Tk's directory as well as
                     24: # Tcl's directory:
                     25: 
                     26: set auto_path "$tk_library [info library]"
                     27: 
                     28: # Turn off strict Motif look and feel as a default.
                     29: 
                     30: set tk_strictMotif 0
                     31: 
                     32: # ----------------------------------------------------------------------
                     33: # Class bindings for various flavors of button widgets.  $tk_priv(window)
                     34: # keeps track of the button containing the mouse, and $tk_priv(relief)
                     35: # saves the original relief of the button so it can be restored when
                     36: # the mouse button is released.
                     37: # ----------------------------------------------------------------------
                     38: 
                     39: bind Button <Any-Enter> {tk_butEnter %W}
                     40: bind Button <Any-Leave> {tk_butLeave %W}
                     41: bind Button <1> {tk_butDown %W}
                     42: bind Button <ButtonRelease-1> {tk_butUp %W}
                     43: 
                     44: bind CheckButton <Any-Enter> {tk_butEnter %W}
                     45: bind CheckButton <Any-Leave> {tk_butLeave %W}
                     46: bind CheckButton <1> {tk_butDown %W}
                     47: bind CheckButton <ButtonRelease-1> {tk_butUp %W}
                     48: 
                     49: bind RadioButton <Any-Enter> {tk_butEnter %W}
                     50: bind RadioButton <Any-Leave> {tk_butLeave %W}
                     51: bind RadioButton <1> {tk_butDown %W}
                     52: bind RadioButton <ButtonRelease-1> {tk_butUp %W}
                     53: 
                     54: # ----------------------------------------------------------------------
                     55: # Class bindings for entry widgets.
                     56: # ----------------------------------------------------------------------
                     57: 
                     58: bind Entry <1> {
                     59:     %W cursor @%x
                     60:     %W select from @%x
                     61:     if {[lindex [%W config -state] 4] == "normal"} {focus %W}
                     62: }
                     63: bind Entry <B1-Motion> {%W select to @%x}
                     64: bind Entry <Shift-1> {%W select adjust @%x}
                     65: bind Entry <Shift-B1-Motion> {%W select to @%x}
                     66: bind Entry <2> {%W scan mark %x}
                     67: bind Entry <B2-Motion> {%W scan dragto %x}
                     68: bind Entry <Any-KeyPress> {
                     69:     if {"%A" != ""} {
                     70:        %W insert cursor %A
                     71:        tk_entrySeeCaret %W
                     72:     }
                     73: }
                     74: bind Entry <Delete> {tk_entryBackspace %W; tk_entrySeeCaret %W}
                     75: bind Entry <BackSpace> {tk_entryBackspace %W; tk_entrySeeCaret %W}
                     76: bind Entry <Control-h> {tk_entryBackspace %W; tk_entrySeeCaret %W}
                     77: bind Entry <Control-d> {%W delete sel.first sel.last; tk_entrySeeCaret %W}
                     78: bind Entry <Control-u> {%W delete 0 end}
                     79: bind Entry <Control-v> {%W insert cursor [selection get]; tk_entrySeeCaret %W}
                     80: bind Entry <Control-w> {tk_entryBackword %W; tk_entrySeeCaret %W}
                     81: tk_bindForTraversal Entry
                     82: 
                     83: # ----------------------------------------------------------------------
                     84: # Class bindings for listbox widgets.
                     85: # ----------------------------------------------------------------------
                     86: 
                     87: bind Listbox <1> {%W select from [%W nearest %y]}
                     88: bind Listbox <B1-Motion> {%W select to [%W nearest %y]}
                     89: bind Listbox <Shift-1> {%W select adjust [%W nearest %y]}
                     90: bind Listbox <Shift-B1-Motion> {%W select to [%W nearest %y]}
                     91: bind Listbox <2> {%W scan mark %x %y}
                     92: bind Listbox <B2-Motion> {%W scan dragto %x %y}
                     93: 
                     94: # ----------------------------------------------------------------------
                     95: # Class bindings for scrollbar widgets.  When strict Motif is requested,
                     96: # the bindings use $tk_priv(buttons) and $tk_priv(activeFg) to set the
                     97: # -activeforeground color to -foreground when the mouse is in the window
                     98: # and restore it when the mouse leaves.
                     99: # ----------------------------------------------------------------------
                    100: 
                    101: bind Scrollbar <Any-Enter> {
                    102:     if $tk_strictMotif {
                    103:        set tk_priv(activeFg) [lindex [%W config -activeforeground] 4]
                    104:        %W config -activeforeground [lindex [%W config -foreground] 4]
                    105:     }
                    106: }
                    107: bind Scrollbar <Any-Leave> {
                    108:     if {$tk_strictMotif && ($tk_priv(buttons) == 0)} {
                    109:        %W config -activeforeground $tk_priv(activeFg)
                    110:     }
                    111: }
                    112: bind Scrollbar <Any-ButtonPress> {incr tk_priv(buttons)}
                    113: bind Scrollbar <Any-ButtonRelease> {incr tk_priv(buttons) -1}
                    114: 
                    115: # ----------------------------------------------------------------------
                    116: # Class bindings for scale widgets.  When strict Motif is requested,
                    117: # the bindings use $tk_priv(buttons) and $tk_priv(activeFg) to set the
                    118: # -activeforeground color to -foreground when the mouse is in the window
                    119: # and restore it when the mouse leaves.
                    120: # ----------------------------------------------------------------------
                    121: 
                    122: bind Scale <Any-Enter> {
                    123:     if $tk_strictMotif {
                    124:        set tk_priv(activeFg) [lindex [%W config -activeforeground] 4]
                    125:        %W config -activeforeground [lindex [%W config -sliderforeground] 4]
                    126:     }
                    127: }
                    128: bind Scale <Any-Leave> {
                    129:     if {$tk_strictMotif && ($tk_priv(buttons) == 0)} {
                    130:        %W config -activeforeground $tk_priv(activeFg)
                    131:     }
                    132: }
                    133: bind Scale <Any-ButtonPress> {incr tk_priv(buttons)}
                    134: bind Scale <Any-ButtonRelease> {incr tk_priv(buttons) -1}
                    135: 
                    136: # ----------------------------------------------------------------------
                    137: # Class bindings for menubutton widgets.  Variables used:
                    138: # $tk_priv(posted) -           keeps track of the menubutton whose menu is
                    139: #                              currently posted (or empty string, if none).
                    140: # $tk_priv(inMenuButton)-      if non-null, identifies menu button
                    141: #                              containing mouse pointer.
                    142: # $tk_priv(relief) -           keeps track of original relief of posted
                    143: #                              menu button, so it can be restored later.
                    144: # $tk_priv(dragging) -         if non-null, identifies menu button whose
                    145: #                              menu is currently being dragged in a tear-off
                    146: #                              operation.
                    147: # $tk_priv(focus) -            records old focus window so focus can be
                    148: #                              returned there after keyboard traversal
                    149: #                              to menu.
                    150: # ----------------------------------------------------------------------
                    151: 
                    152: bind Menubutton <Enter> {
                    153:     set tk_priv(inMenuButton) %W
                    154:     if {[lindex [%W config -state] 4] != "disabled"} {
                    155:        if {!$tk_strictMotif} {
                    156:            %W config -state active
                    157:        }
                    158:     }
                    159: }
                    160: bind Menubutton <Any-Leave> {
                    161:     set tk_priv(inMenuButton) {}
                    162:     if {[lindex [%W config -state] 4] != "disabled"} {
                    163:        if {!$tk_strictMotif} {
                    164:            %W config -state normal
                    165:        }
                    166:     }
                    167: }
                    168: bind Menubutton <1> {tk_mbButtonDown %W}
                    169: bind Menubutton <Any-ButtonRelease-1> {
                    170:     if {($tk_priv(inMenuButton) != "") && ($tk_priv(posted) != "")} {
                    171:        [lindex [$tk_priv(posted) config -menu] 4] activate 0
                    172:     } else {
                    173:        tk_mbUnpost
                    174:     }
                    175: }
                    176: 
                    177: # In the binding below, it's important to ignore grab-related entries
                    178: # and exits because they lag reality and can cause menus to chase
                    179: # their own tail, repeatedly posting and unposting.
                    180: 
                    181: bind Menubutton <B1-Enter> {
                    182:     set tk_priv(inMenuButton) %W
                    183:     if {([lindex [%W config -state] 4] != "disabled")
                    184:            && ("%m" != "NotifyGrab") && ("%m" != "NotifyUngrab")} {
                    185:        if {!$tk_strictMotif} {
                    186:            %W config -state active
                    187:        }
                    188:        tk_mbPost %W
                    189:     }
                    190: }
                    191: bind Menubutton <2> {
                    192:     if {($tk_priv(posted) == "")
                    193:            && ([lindex [%W config -state] 4] != "disabled")} {
                    194:        set tk_priv(dragging) %W
                    195:        [lindex [$tk_priv(dragging) config -menu] 4] post %X %Y
                    196:     }
                    197: }
                    198: bind Menubutton <B2-Motion> {
                    199:     if {$tk_priv(dragging) != ""} {
                    200:        [lindex [$tk_priv(dragging) config -menu] 4] post %X %Y
                    201:     }
                    202: }
                    203: bind Menubutton <ButtonRelease-2> {set tk_priv(dragging) ""}
                    204: 
                    205: # ----------------------------------------------------------------------
                    206: # Class bindings for menu widgets.  $tk_priv(x) and $tk_priv(y) are used
                    207: # to keep track of the position of the mouse cursor in the menu window
                    208: # during dragging of tear-off menus.  $tk_priv(window) keeps track of
                    209: # the menu containing the mouse, if any.
                    210: # ----------------------------------------------------------------------
                    211: 
                    212: bind Menu <Any-Enter> {set tk_priv(window) %W; %W activate @%y}
                    213: bind Menu <Any-Leave> {set tk_priv(window) {}; %W activate none}
                    214: bind Menu <Any-Motion> {
                    215:     if {$tk_priv(window) != ""} {
                    216:        %W activate @%y
                    217:     }
                    218: }
                    219: bind Menu <ButtonRelease-1> {tk_invokeMenu %W}
                    220: bind Menu <2> {set tk_priv(x) %x; set tk_priv(y) %y}
                    221: bind Menu <B2-Motion> {
                    222:     if {$tk_priv(posted) == ""} {
                    223:        %W post [expr %X-$tk_priv(x)] [expr %Y-$tk_priv(y)]
                    224:     }
                    225: }
                    226: bind Menu <B2-Leave> { }
                    227: bind Menu <B2-Enter> { }
                    228: bind Menu <Escape> {tk_mbUnpost}
                    229: bind Menu <Any-KeyPress> {tk_traverseWithinMenu %W %A}
                    230: bind Menu <Left> {tk_nextMenu -1}
                    231: bind Menu <Right> {tk_nextMenu 1}
                    232: bind Menu <Up> {tk_nextMenuEntry -1}
                    233: bind Menu <Down> {tk_nextMenuEntry 1}
                    234: bind Menu <Return> {tk_invokeMenu %W}
                    235: 
                    236: # ----------------------------------------------------------------------
                    237: # Class bindings for text widgets. $tk_priv(selectMode) holds one of
                    238: # "char", "word", or "line" to indicate which selection mode is active.
                    239: # ----------------------------------------------------------------------
                    240: 
                    241: bind Text <1> {
                    242:     set tk_priv(selectMode) char
                    243:     %W mark set insert @%x,%y
                    244:     %W mark set anchor insert
                    245:     if {[lindex [%W config -state] 4] == "normal"} {focus %W}
                    246: }
                    247: bind Text <Double-1> {
                    248:     set tk_priv(selectMode) word
                    249:     %W mark set insert "@%x,%y wordstart"
                    250:     tk_textSelectTo %W insert
                    251: }
                    252: bind Text <Triple-1> {
                    253:     set tk_priv(selectMode) line
                    254:     %W mark set insert "@%x,%y linestart"
                    255:     tk_textSelectTo %W insert
                    256: }
                    257: bind Text <B1-Motion> {tk_textSelectTo %W @%x,%y}
                    258: bind Text <Shift-1> {
                    259:     tk_textResetAnchor %W @%x,%y
                    260:     tk_textSelectTo %W @%x,%y
                    261: }
                    262: bind Text <Shift-B1-Motion> {tk_textSelectTo %W @%x,%y}
                    263: bind Text <2> {%W scan mark %y}
                    264: bind Text <B2-Motion> {%W scan dragto %y}
                    265: bind Text <Any-KeyPress> {
                    266:     if {"%A" != ""} {
                    267:        %W insert insert %A
                    268:        %W yview -pickplace insert
                    269:     }
                    270: }
                    271: bind Text <Return> {%W insert insert \n; %W yview -pickplace insert}
                    272: bind Text <BackSpace> {tk_textBackspace %W; %W yview -pickplace insert}
                    273: bind Text <Delete> {tk_textBackspace %W; %W yview -pickplace insert}
                    274: bind Text <Control-h> {tk_textBackspace %W; %W yview -pickplace insert}
                    275: bind Text <Control-d> {%W delete sel.first sel.last}
                    276: bind Text <Control-v> {
                    277:     %W insert insert [selection get]
                    278:     %W yview -pickplace insert
                    279: }
                    280: tk_bindForTraversal Text
                    281: 
                    282: # Initialize the elements of tk_priv that require initialization.
                    283: 
                    284: set tk_priv(buttons) 0
                    285: set tk_priv(dragging) {}
                    286: set tk_priv(focus) {}
                    287: set tk_priv(inMenuButton) {}
                    288: set tk_priv(posted) {}
                    289: set tk_priv(selectMode) char
                    290: set tk_priv(window) {}

unix.superglobalmegacorp.com

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