summaryrefslogtreecommitdiff
path: root/tix/demos/samples/CObjView.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'tix/demos/samples/CObjView.tcl')
-rw-r--r--tix/demos/samples/CObjView.tcl85
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
+}