home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- # next line is a comment in tcl \
- exec wish "$0" ${1+"$@"}
-
- ## buttons.tcl
- ##
- ## demonstrates the simulation of a button array
- ##
- ## ellson@lucent.com
- ## modifications made by jeff.hobbs@acm.org
-
- source [file join [file dirname [info script]] loadtable.tcl]
-
- array set table {
- rows 20
- cols 20
- table .table
- }
-
- # create the table
- set t $table(table)
- table $t -rows [expr {$table(rows)+1}] -cols [expr {$table(cols)+1}] \
- -titlerows 1 -titlecols 1 \
- -roworigin -1 -colorigin -1 \
- -colwidth 4 \
- -width 8 -height 8 \
- -variable tab \
- -flashmode off \
- -cursor top_left_arrow \
- -borderwidth 2 \
- -state disabled \
- -xscrollcommand ".sx set" -yscrollcommand ".sy set"
-
- scrollbar .sx -orient h -command "$t xview"
- scrollbar .sy -orient v -command "$t yview"
-
- grid $t .sy -sticky nsew
- grid .sx -sticky ew
- grid columnconfig . 0 -weight 1
- grid rowconfig . 0 -weight 1
-
- # set up tags for the various states of the buttons
- $t tag configure OFF -bg red -relief raised
- $t tag configure ON -bg green -relief sunken
- $t tag configure sel -bg gray75 -relief flat
-
- # clean up if mouse leaves the widget
- bind $t <Leave> {
- %W selection clear all
- }
-
- # highlight the cell under the mouse
- bind $t <Motion> {
- if {[%W selection includes @%x,%y]} break
- %W selection clear all
- %W selection set @%x,%y
- break
- ## "break" prevents the call to tkTableCheckBorder
- }
-
- # mousebutton 1 toggles the value of the cell
- # use of "selection includes" would work here
- bind $t <1> {
- set rc [%W cursel]
- if {[string match ON $tab($rc)]} {
- set tab($rc) OFF
- %W tag celltag OFF $rc
- } {
- set tab($rc) ON
- %W tag celltag ON $rc
- }
- }
-
- # inititialize the array, titles, and celltags
- for {set i 0} {$i < $table(rows)} {incr i} {
- set tab($i,-1) $i
- for {set j 0} {$j < $table(cols)} {incr j} {
- if {! $i} {set tab(-1,$j) $j}
- set tab($i,$j) "OFF"
- $t tag celltag OFF $i,$j
- }
- }
-