|
|
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) {}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.