Spaces:
Running
Running
# -*-mode: tcl; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- | |
# | |
# $Id: SGrid1.tcl,v 1.3 2001/12/09 05:31:07 idiscovery Exp $ | |
# | |
# 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. | |
# Demonstrates the tixGrid widget | |
# | |
proc RunSample {w} { | |
wm title $w "Doe Inc. Performance" | |
wm geometry $w 640x300 | |
set top [frame $w.f -bd 1 -relief raised] | |
set box [tixButtonBox $w.b -bd 1 -relief raised] | |
pack $box -side bottom -fill both | |
pack $top -side top -fill both -expand yes | |
label $top.lab -text "This widget is still under alpha | |
Please ignore the debug messages | |
Not all features have been implemented" -justify left | |
pack $top.lab -side top -anchor c -padx 3 -pady 3 | |
MakeGrid $top | |
# Create the buttons | |
# | |
$box add ok -text Ok -command "destroy $w" -width 6 | |
$box add cancel -text Cancel -command "destroy $w" -width 6 | |
} | |
# This command is called whenever the background of the grid needs to | |
# be reformatted. The x1, y1, x2, y2 sprcifies the four corners of the area | |
# that needs to be reformatted. | |
# | |
proc gformat {w area x1 y1 x2 y2} { | |
set bg(s-margin) gray65 | |
set bg(x-margin) gray65 | |
set bg(y-margin) gray65 | |
set bg(main) gray20 | |
case $area { | |
main { | |
for {set y [expr ($y1/2) * 2]} {$y <= $y2} {incr y 2} { | |
$w format border $x1 $y $x2 $y \ | |
-relief flat -filled 1\ | |
-bd 0 -bg #80b080 -selectbackground #80b0ff | |
} | |
$w format grid $x1 $y1 $x2 $y2 \ | |
-relief raised -bd 1 -bordercolor $bg($area) -filled 0 -bg red\ | |
-xon 1 -yon 1 -xoff 0 -yoff 0 -anchor se | |
} | |
y-margin { | |
$w format border $x1 $y1 $x2 $y2 \ | |
-fill 1 -relief raised -bd 1 -bg $bg($area) \ | |
-selectbackground gray80 | |
} | |
default { | |
$w format border $x1 $y1 $x2 $y2 \ | |
-filled 1 \ | |
-relief raised -bd 1 -bg $bg($area) \ | |
-selectbackground gray80 | |
} | |
} | |
} | |
# Print a number in $ format | |
# | |
# | |
proc Dollar {s} { | |
set n [string len $s] | |
set start [expr $n % 3] | |
if {$start == 0} { | |
set start 3 | |
} | |
set str "" | |
for {set i 0} {$i < $n} {incr i} { | |
if {$start == 0} { | |
append str "," | |
set start 3 | |
} | |
incr start -1 | |
append str [string index $s $i] | |
} | |
return $str | |
} | |
proc MakeGrid {w} { | |
# data format {year revenue profit} | |
# | |
set data { | |
{1970 1000000000 1000000} | |
{1971 1100000000 2000000} | |
{1972 1200000000 3000000} | |
{1973 1300000000 4000000} | |
{1974 1400000000 5000000} | |
{1975 1500000000 6000000} | |
{1976 1600000000 7000000} | |
{1977 1700000000 8000000} | |
{1978 1800000000 9000000} | |
{1979 1900000000 10000000} | |
{1980 2000000000 11000000} | |
{1981 2100000000 22000000} | |
{1982 2200000000 33000000} | |
{1983 2300000000 44000000} | |
{1984 2400000000 55000000} | |
{1985 3500000000 36000000} | |
{1986 4600000000 57000000} | |
{1987 5700000000 68000000} | |
{1988 6800000000 79000000} | |
{1989 7900000000 90000000} | |
{1990 13000000000 111000000} | |
{1991 14100000000 122000000} | |
{1992 16200000000 233000000} | |
{1993 28300000000 344000000} | |
{1994 29400000000 455000000} | |
{1995 38500000000 536000000} | |
} | |
set headers { | |
"Revenue ($)" | |
"Rev. Growth (%)" | |
"Profit ($)" | |
"Profit Growth (%)" | |
} | |
# Create the grid | |
# | |
tixScrolledGrid $w.g -bd 0 | |
pack $w.g -expand yes -fill both -padx 3 -pady 3 | |
set grid [$w.g subwidget grid] | |
$grid config -formatcmd "gformat $grid" | |
# Set the size of the columns | |
# | |
$grid size col 0 -size 10char | |
$grid size col 1 -size auto | |
$grid size col 2 -size auto | |
$grid size col 3 -size auto | |
$grid size col 4 -size auto | |
# set the default size of the column and rows. these sizes will be used | |
# if the size of a row or column has not be set via the "size col ?" | |
# command | |
$grid size col default -size 5char | |
$grid size row default -size 1.1char -pad0 3 | |
set margin [tixDisplayStyle text -refwindow $grid \ | |
-anchor c -padx 3 -font [tix option get bold_font]] | |
set dollar [tixDisplayStyle text -refwindow $grid \ | |
-anchor e] | |
# Create the headers | |
# | |
set x 1 | |
foreach h $headers { | |
$grid set $x 0 -itemtype text -text $h -style $margin | |
incr x | |
} | |
# Insert the data, year by year | |
# | |
set lastRevn {} | |
set lastProf {} | |
set i 1 | |
foreach line $data { | |
set year [lindex $line 0] | |
set revn [lindex $line 1] | |
set prof [lindex $line 2] | |
if {$lastRevn != {}} { | |
set rgrowth \ | |
[format %4.2f [expr ($revn.0-$lastRevn)/$lastRevn*100.0]] | |
} else { | |
set rgrowth "-" | |
} | |
if {$lastProf != {}} { | |
set pgrowth \ | |
[format %4.2f [expr ($prof.0-$lastProf)/$lastProf*100.0]] | |
} else { | |
set pgrowth "-" | |
} | |
$grid set 0 $i -itemtype text -style $margin -text $year | |
$grid set 1 $i -itemtype text -style $dollar -text [Dollar $revn] | |
$grid set 2 $i -itemtype text -style $dollar -text $rgrowth | |
$grid set 3 $i -itemtype text -style $dollar -text [Dollar $prof] | |
$grid set 4 $i -itemtype text -style $dollar -text $pgrowth | |
set lastRevn $revn.0 | |
set lastProf $prof.0 | |
incr i | |
} | |
} | |
if {![info exists tix_demo_running]} { | |
wm withdraw . | |
set w .demo | |
toplevel $w; wm transient $w "" | |
RunSample $w | |
bind $w <Destroy> exit | |
} | |