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

1.1       root        1: # mkPlot w
                      2: #
                      3: # Create a top-level window containing a canvas displaying a simple
                      4: # graph with data points that can be moved interactively.
                      5: #
                      6: # Arguments:
                      7: #    w -       Name to use for new top-level window.
                      8: 
                      9: proc mkPlot {{w .plot}} {
                     10:     catch {destroy $w}
                     11:     toplevel $w
                     12:     dpos $w
                     13:     wm title $w "Plot Demonstration"
                     14:     wm iconname $w "Plot"
                     15:     set c $w.c
                     16: 
                     17:     frame $w.frame1 -relief raised -bd 2
                     18:     canvas $c -relief raised -width 450 -height 300
                     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 canvas widget containing a simple 2-dimensional plot.  You can doctor the data by dragging any of the points with mouse button 1."
                     24:     pack append $w.frame1 $w.frame1.m {frame center}
                     25: 
                     26:     set font -Adobe-helvetica-medium-r-*-180-*
                     27: 
                     28:     $c create line 100 250 400 250 -width 2
                     29:     $c create line 100 250 100 50 -width 2
                     30:     $c create text 225 20 -text "A Simple Plot" -font $font -fill brown
                     31:     
                     32:     for {set i 0} {$i <= 10} {incr i} {
                     33:        set x [expr {100 + ($i*30)}]
                     34:        $c create line $x 250 $x 245 -width 2
                     35:        $c create text $x 254 -text [expr 10*$i] -anchor n -font $font
                     36:     }
                     37:     for {set i 0} {$i <= 5} {incr i} {
                     38:        set y [expr {250 - ($i*40)}]
                     39:        $c create line 100 $y 105 $y -width 2
                     40:        $c create text 96 $y -text [expr $i*50].0 -anchor e -font $font
                     41:     }
                     42:     
                     43:     foreach point {{12 56} {20 94} {33 98} {32 120} {61 180}
                     44:            {75 160} {98 223}} {
                     45:        set x [expr {100 + (3*[lindex $point 0])}]
                     46:        set y [expr {250 - (4*[lindex $point 1])/5}]
                     47:        set item [$c create oval [expr $x-6] [expr $y-6] \
                     48:                [expr $x+6] [expr $y+6] -width 1 -outline black \
                     49:                -fill SkyBlue2]
                     50:        $c addtag point withtag $item
                     51:     }
                     52: 
                     53:     $c bind point <Any-Enter> "$c itemconfig current -fill red"
                     54:     $c bind point <Any-Leave> "$c itemconfig current -fill SkyBlue2"
                     55:     $c bind point <1> "plotDown $c %x %y"
                     56:     $c bind point <ButtonRelease-1> "$c dtag selected"
                     57:     bind $c <B1-Motion> "plotMove $c %x %y"
                     58: }
                     59: 
                     60: set plot(lastX) 0
                     61: set plot(lastY) 0
                     62: 
                     63: proc plotDown {w x y} {
                     64:     global plot
                     65:     $w dtag selected
                     66:     $w addtag selected withtag current
                     67:     $w raise current
                     68:     set plot(lastX) $x
                     69:     set plot(lastY) $y
                     70: }
                     71: 
                     72: proc plotMove {w x y} {
                     73:     global plot
                     74:     $w move selected [expr $x-$plot(lastX)] [expr $y-$plot(lastY)]
                     75:     set plot(lastX) $x
                     76:     set plot(lastY) $y
                     77: }

unix.superglobalmegacorp.com

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