Annotation of micropolis/src/tk/library/demos/mkTextBind.tcl, revision 1.1

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: }

unix.superglobalmegacorp.com

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