diff options
Diffstat (limited to 'tix/demos/samples/CObjView.tcl')
-rw-r--r-- | tix/demos/samples/CObjView.tcl | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/tix/demos/samples/CObjView.tcl b/tix/demos/samples/CObjView.tcl new file mode 100644 index 00000000000..891d6cf5fb7 --- /dev/null +++ b/tix/demos/samples/CObjView.tcl @@ -0,0 +1,85 @@ +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "widget": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program using tixwish. + +# This program demonstrates the use of the CObjView (Canvas Object +# View) class. +# + + +proc RunSample {w} { + label $w.lab -justify left -text \ +"Click on the buttons to add or delete canvas +objects randomally. Notice the scrollbars automatically +adjust to include all objects in the scroll-region." + + pack $w.lab -anchor c -padx 10 -pady 6 + tixCObjView $w.c + pack $w.c -expand yes -fill both -padx 4 -pady 2 + button $w.add -command "CVDemo_Add $w.c" -text Add -width 6 + button $w.del -command "CVDemo_Delete $w.c" -text Delete -width 6 + pack $w.add $w.del -side left -padx 20 -pady 10 -anchor c -expand yes +} + +set cvdemo_counter 0 +proc CVDemo_Add {cov} { + global cvdemo_counter + + # Generate four pseudo random numbers (x,y,w,h) to define the coordinates + # of a rectangle object in the canvas. + # + set colors {red green blue white black gray yellow} + + set px [expr [lindex [time update] 0] + $cvdemo_counter] + set py [expr [lindex [time update] 0] + $cvdemo_counter] + set pw [expr [lindex [time update] 0] + $cvdemo_counter] + set ph [expr [lindex [time update] 0] + $cvdemo_counter] + set pc [expr [lindex [time update] 0] + $cvdemo_counter] + + set x [expr (20 - ($px % 37)) * 10] + set y [expr (10 - ($py % 23)) * 10] + set w [expr ($pw % 17) * 10] + set h [expr ($ph % 17) * 10] + + # Create the canvas object + # + $cov subwidget canvas create rectangle $x $y [expr $x+$w] [expr $y+$h] \ + -fill [lindex $colors [expr $pc % [llength $colors]]] + + # Call the adjustscrollregion command to set the scroll bars so that all + # objects are included in the scroll-region + # + $cov adjustscrollregion + + # This number acts as the seed for the next round of randomization. + # + set cvdemo_counter [expr ($px % 37)] +} + +proc CVDemo_Delete {cov} { + set px [lindex [time update] 0] + set w [$cov subwidget canvas] + set items [$w find withtag all] + + if [string compare $items ""] { + # There are items in the canvas, randomally delete one of them + # and re-adjust the scroll-region + # + set toDelete [expr $px % [llength $items]] + $w delete [lindex $items $toDelete] + + $cov adjustscrollregion + } +} + +if {![info exists tix_demo_running]} { + wm withdraw . + set w .demo + toplevel $w + RunSample $w + bind $w <Destroy> exit +} |