File size: 5,418 Bytes
ef99749 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# -*-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
}
|