1#!/usr/local/bin/bltwish 2 3package require BLT 4# -------------------------------------------------------------------------- 5# Starting with Tcl 8.x, the BLT commands are stored in their own 6# namespace called "blt". The idea is to prevent name clashes with 7# Tcl commands and variables from other packages, such as a "table" 8# command in two different packages. 9# 10# You can access the BLT commands in a couple of ways. You can prefix 11# all the BLT commands with the namespace qualifier "blt::" 12# 13# blt::graph .g 14# blt::table . .g -resize both 15# 16# or you can import all the command into the global namespace. 17# 18# namespace import blt::* 19# graph .g 20# table . .g -resize both 21# 22# -------------------------------------------------------------------------- 23 24if { $tcl_version >= 8.0 } { 25 namespace import blt::* 26 namespace import -force blt::tile::* 27} 28 29source scripts/demo.tcl 30 31source scripts/stipples.tcl 32source scripts/patterns.tcl 33 34 35option add *graph.xTitle "X Axis Label" 36option add *graph.yTitle "Y Axis Label" 37option add *graph.title "A Simple Barchart" 38option add *graph.xFont *Times-Medium-R*12* 39option add *graph.elemBackground white 40option add *graph.elemRelief raised 41 42set visual [winfo screenvisual .] 43if { $visual != "staticgray" && $visual != "grayscale" } { 44 option add *print.background yellow 45 option add *quit.background red 46} 47 48htext .header -text { 49This is an example of the barchart widget. To create a postscript 50file "bar.ps", press the %% 51button $htext(widget).print -text {Print} -command { 52 $graph postscript output bar.ps -maxpect 1 53} 54$htext(widget) append $htext(widget).print 55%% button.} 56 57set graph [barchart .b] 58$graph configure \ 59 -invert true \ 60 -baseline 1.2 61$graph xaxis configure \ 62 -command FormatLabel \ 63 -descending true 64$graph legend configure \ 65 -hide yes 66 67htext .footer -text {Hit the %% 68button $htext(widget).quit -text quit -command exit 69$htext(widget) append $htext(widget).quit 70%% button when you've seen enough.%% 71label $htext(widget).logo -bitmap BLT 72$htext(widget) append $htext(widget).logo -padx 20 73%%} 74 75set names { One Two Three Four Five Six Seven Eight } 76if { $visual == "staticgray" || $visual == "grayscale" } { 77 set fgcolors { white white white white white white white white } 78 set bgcolors { black black black black black black black black } 79} else { 80 set fgcolors { red green blue purple orange brown cyan navy } 81 set bgcolors { green blue purple orange brown cyan navy red } 82} 83set bitmaps { 84 bdiagonal1 bdiagonal2 checker2 checker3 cross1 cross2 cross3 crossdiag 85 dot1 dot2 dot3 dot4 fdiagonal1 fdiagonal2 hline1 hline2 lbottom ltop 86 rbottom rtop vline1 vline2 87} 88set numColors [llength $names] 89 90for { set i 0} { $i < $numColors } { incr i } { 91 $graph element create [lindex $names $i] \ 92 -data { $i+1 $i+1 } \ 93 -fg [lindex $fgcolors $i] \ 94 -bg [lindex $bgcolors $i] \ 95 -stipple [lindex $bitmaps $i] \ 96 -relief raised \ 97 -bd 2 98} 99 100$graph element create Nine \ 101 -data { 9 -1.0 } \ 102 -fg red \ 103 -relief sunken 104$graph element create Ten \ 105 -data { 10 2 } \ 106 -fg seagreen \ 107 -stipple hobbes \ 108 -background palegreen 109$graph element create Eleven \ 110 -data { 11 3.3 } \ 111 -fg blue 112 113# -coords { -Inf Inf } 114 115$graph marker create bitmap \ 116 -coords { 11 3.3 } -anchor center \ 117 -bitmap @bitmaps/sharky.xbm \ 118 -name bitmap \ 119 -fill "" 120 121$graph marker create polygon \ 122 -coords { 5 0 7 2 10 10 10 2 } \ 123 -name poly -linewidth 0 -fill "" 124 125table . \ 126 .header 0,0 -padx .25i \ 127 $graph 1,0 -fill both \ 128 .footer 2,0 -padx .25i 129 130table configure . r0 r2 -resize none 131 132wm min . 0 0 133 134proc FormatLabel { w value } { 135 # Determine the element name from the value 136 set displaylist [$w element show] 137 set index [expr round($value)-1] 138 set name [lindex $displaylist $index] 139 if { $name == "" } { 140 return $name 141 } 142 # Return the element label 143 set info [$w element configure $name -label] 144 return [lindex $info 4] 145} 146 147Blt_ZoomStack $graph 148Blt_Crosshairs $graph 149Blt_ActiveLegend $graph 150Blt_ClosestPoint $graph 151 152 153$graph marker bind all <B3-Motion> { 154 set coords [%W invtransform %x %y] 155 catch { %W marker configure [%W marker get current] -coords $coords } 156} 157 158$graph marker bind all <Enter> { 159 set marker [%W marker get current] 160 catch { %W marker configure $marker -fill green -outline black} 161} 162 163$graph marker bind all <Leave> { 164 set marker [%W marker get current] 165 catch { 166 set default [lindex [%W marker configure $marker -fill] 3] 167 %W marker configure $marker -fill "$default" 168 } 169} 170 171