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

1.1       root        1: # mkCanvText w
                      2: #
                      3: # Create a top-level window containing a canvas displaying a text
                      4: # string and allowing the string to be edited and re-anchored.
                      5: #
                      6: # Arguments:
                      7: #    w -       Name to use for new top-level window.
                      8: 
                      9: proc mkCanvText {{w .ctext}} {
                     10:     catch {destroy $w}
                     11:     toplevel $w
                     12:     dpos $w
                     13:     wm title $w "Canvas Text Demonstration"
                     14:     wm iconname $w "Text"
                     15:     set c $w.c
                     16: 
                     17:     frame $w.frame1 -relief raised -bd 2
                     18:     canvas $c -relief raised -width 500 -height 400
                     19:     button $w.ok -text "OK" -command "destroy $w"
                     20:     pack append $w $w.frame1 {top fill} $w.c {expand fill} \
                     21:            $w.ok {bottom pady 10 frame center}
                     22:     message $w.frame1.m -font -Adobe-Times-Medium-R-Normal-*-180-* -aspect 300 \
                     23:            -text "This window displays a string of text to demonstrate the text facilities of canvas widgets.  You can point, click, and type.  You can also select and then delete with Control-d.  You can copy the selection with Control-v.  You can click in the boxes to adjust the position of the text relative to its positioning point or change its justification."
                     24:     pack append $w.frame1 $w.frame1.m {frame center}
                     25: 
                     26:     set font -Adobe-helvetica-medium-r-*-240-*
                     27: 
                     28:     $c create rectangle 245 195 255 205 -outline black -fill red
                     29: 
                     30:     # First, create the text item and give it bindings so it can be edited.
                     31:     
                     32:     $c addtag text withtag [$c create text 250 200 -text "This is just a string of text to demonstrate the text facilities of canvas widgets. You can point, click, and type.  You can also select and then delete with Control-d." -width 440 -anchor n -font $font -justify left]
                     33:     $c bind text <1> "textB1Press $c %x %y"
                     34:     $c bind text <B1-Motion> "textB1Move $c %x %y"
                     35:     $c bind text <Shift-1> "$c select adjust current @%x,%y"
                     36:     $c bind text <Shift-B1-Motion> "textB1Move $c %x %y"
                     37:     $c bind text <KeyPress> "$c insert text cursor %A"
                     38:     $c bind text <Shift-KeyPress> "$c insert text cursor %A"
                     39:     $c bind text <Control-h> "textBs $c"
                     40:     $c bind text <Delete> "textBs $c"
                     41:     $c bind text <Control-d> "$c dchars text sel.first sel.last"
                     42:     $c bind text <Control-v> "$c insert text cursor \[selection get\]"
                     43: 
                     44:     # Next, create some items that allow the text's anchor position
                     45:     # to be edited.
                     46: 
                     47:     set x 50
                     48:     set y 50
                     49:     set color LightSkyBlue1
                     50:     mkTextConfig $c $x $y -anchor se $color
                     51:     mkTextConfig $c [expr $x+30] [expr $y] -anchor s $color
                     52:     mkTextConfig $c [expr $x+60] [expr $y] -anchor sw $color
                     53:     mkTextConfig $c [expr $x] [expr $y+30] -anchor e $color
                     54:     mkTextConfig $c [expr $x+30] [expr $y+30] -anchor center $color
                     55:     mkTextConfig $c [expr $x+60] [expr $y+30] -anchor w $color
                     56:     mkTextConfig $c [expr $x] [expr $y+60] -anchor ne $color
                     57:     mkTextConfig $c [expr $x+30] [expr $y+60] -anchor n $color
                     58:     mkTextConfig $c [expr $x+60] [expr $y+60] -anchor nw $color
                     59:     set item [$c create rect [expr $x+40] [expr $y+40] [expr $x+50] [expr $y+50] \
                     60:            -outline black -fill red]
                     61:     $c bind $item <1> "$c itemconf text -anchor center"
                     62:     $c create text [expr $x+45] [expr $y-5] -text {Text Position} -anchor s \
                     63:            -font -Adobe-times-medium-r-normal--*-240-* -fill brown
                     64: 
                     65:     # Lastly, create some items that allow the text's justification to be
                     66:     # changed.
                     67:     
                     68:     set x 350
                     69:     set y 50
                     70:     set color SeaGreen2
                     71:     mkTextConfig $c $x $y -justify left $color
                     72:     mkTextConfig $c [expr $x+30] [expr $y] -justify center $color
                     73:     mkTextConfig $c [expr $x+60] [expr $y] -justify right $color
                     74:     $c create text [expr $x+45] [expr $y-5] -text {Justification} -anchor s \
                     75:            -font -Adobe-times-medium-r-normal--*-240-* -fill brown
                     76: 
                     77:     $c bind config <Enter> "textEnter $c"
                     78:     $c bind config <Leave> "$c itemconf current -fill \$textConfigFill"
                     79: }
                     80: 
                     81: proc mkTextConfig {w x y option value color} {
                     82:     set item [$w create rect [expr $x] [expr $y] [expr $x+30] [expr $y+30] \
                     83:            -outline black -fill $color -width 1]
                     84:     $w bind $item <1> "$w itemconf text $option $value"
                     85:     $w addtag config withtag $item
                     86: }
                     87: 
                     88: set textConfigFill {}
                     89: 
                     90: proc textEnter {w} {
                     91:     global textConfigFill
                     92:     set textConfigFill [lindex [$w itemconfig current -fill] 4]
                     93:     $w itemconfig current -fill black
                     94: }
                     95: 
                     96: proc textB1Press {w x y} {
                     97:     $w cursor current @$x,$y
                     98:     $w focus current
                     99:     focus $w
                    100:     $w select from current @$x,$y
                    101: }
                    102: 
                    103: proc textB1Move {w x y} {
                    104:     $w select to current @$x,$y
                    105: }
                    106: 
                    107: proc textBs {w} {
                    108:     set char [expr {[$w index text cursor] - 1}]
                    109:     if {$char >= 0} {$w dchar text $char}
                    110: }

unix.superglobalmegacorp.com

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