|
|
1.1 ! root 1: # mkTextBind w ! 2: # ! 3: # Create a top-level window that illustrates how you can bind ! 4: # Tcl commands to regions of text in a text widget. ! 5: # ! 6: # Arguments: ! 7: # w - Name to use for new top-level window. ! 8: ! 9: proc mkTextBind {{w .bindings}} { ! 10: catch {destroy $w} ! 11: toplevel $w ! 12: dpos $w ! 13: wm title $w "Text Demonstration - Tag Bindings" ! 14: wm iconname $w "Text Bindings" ! 15: button $w.ok -text OK -command "destroy $w" ! 16: text $w.t -relief raised -bd 2 -yscrollcommand "$w.s set" -setgrid true \ ! 17: -width 60 -height 28 \ ! 18: -font "-Adobe-Helvetica-Bold-R-Normal-*-120-*" ! 19: scrollbar $w.s -relief flat -command "$w.t yview" ! 20: pack append $w $w.ok {bottom fillx} $w.s {right filly} $w.t {expand fill} ! 21: ! 22: # Set up display styles ! 23: ! 24: if {[winfo screendepth $w] > 4} { ! 25: set bold "-foreground red" ! 26: set normal "-foreground {}" ! 27: } else { ! 28: set bold "-foreground white -background black" ! 29: set normal "-foreground {} -background {}" ! 30: } ! 31: $w.t insert 0.0 {\ ! 32: The same tag mechanism that controls display styles in text ! 33: widgets can also be used to associate Tcl commands with regions ! 34: of text, so that mouse or keyboard actions on the text cause ! 35: particular Tcl commands to be invoked. For example, in the ! 36: text below the descriptions of the canvas demonstrations have ! 37: been tagged. When you move the mouse over a demo description ! 38: the description lights up, and when you press button 3 over a ! 39: description then that particular demonstration is invoked. ! 40: ! 41: This demo package contains a number of demonstrations of Tk's ! 42: canvas widgets. Here are brief descriptions of some of the ! 43: demonstrations that are available: ! 44: ! 45: } ! 46: insertWithTags $w.t \ ! 47: {1. Samples of all the different types of items that can be ! 48: created in canvas widgets.} d1 ! 49: insertWithTags $w.t \n\n ! 50: insertWithTags $w.t \ ! 51: {2. A simple two-dimensional plot that allows you to adjust ! 52: the positions of the data points.} d2 ! 53: insertWithTags $w.t \n\n ! 54: insertWithTags $w.t \ ! 55: {3. Anchoring and justification modes for text items.} d3 ! 56: insertWithTags $w.t \n\n ! 57: insertWithTags $w.t \ ! 58: {4. An editor for arrow-head shapes for line items.} d4 ! 59: insertWithTags $w.t \n\n ! 60: insertWithTags $w.t \ ! 61: {5. A ruler with facilities for editing tab stops.} d5 ! 62: insertWithTags $w.t \n\n ! 63: insertWithTags $w.t \ ! 64: {6. A grid that demonstrates how canvases can be scrolled.} d6 ! 65: ! 66: foreach tag {d1 d2 d3 d4 d5 d6} { ! 67: $w.t tag bind $tag <Any-Enter> "$w.t tag configure $tag $bold" ! 68: $w.t tag bind $tag <Any-Leave> "$w.t tag configure $tag $normal" ! 69: } ! 70: $w.t tag bind d1 <3> mkItems ! 71: $w.t tag bind d2 <3> mkPlot ! 72: $w.t tag bind d3 <3> mkCanvText ! 73: $w.t tag bind d4 <3> mkArrow ! 74: $w.t tag bind d5 <3> mkRuler ! 75: $w.t tag bind d6 <3> mkScroll ! 76: ! 77: $w.t mark set insert 0.0 ! 78: bind $w <Any-Enter> "focus $w.t" ! 79: } ! 80: ! 81: # The procedure below inserts text into a given text widget and ! 82: # applies one or more tags to that text. The arguments are: ! 83: # ! 84: # w Window in which to insert ! 85: # text Text to insert (it's inserted at the "insert" mark) ! 86: # args One or more tags to apply to text. If this is empty ! 87: # then all tags are removed from the text. ! 88: ! 89: proc insertWithTags {w text args} { ! 90: set start [$w index insert] ! 91: $w insert insert $text ! 92: foreach tag [$w tag names $start] { ! 93: $w tag remove $tag $start insert ! 94: } ! 95: foreach i $args { ! 96: $w tag add $i $start insert ! 97: } ! 98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.