# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: Meter.tcl,v 1.3 2001/12/09 05:04:02 idiscovery Exp $ # # Meter.tcl -- # # Implements the tixMeter widget # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixMeter { -classname TixMeter -superclass tixPrimitive -method { } -flag { -foreground -text -value } -configspec { {-fillcolor fillColor FillColor #8080ff} {-foreground foreground Foreground black} {-text text Text ""} {-value value Value 0} } -default { {.relief sunken} {.borderWidth 2} {.width 150} } } proc tixMeter:InitWidgetRec {w} { upvar #0 $w data global env tixChainMethod $w InitWidgetRec } #---------------------------------------------------------------------- # Construct widget #---------------------------------------------------------------------- proc tixMeter:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(w:canvas) [canvas $w.canvas] pack $data(w:canvas) -expand yes -fill both tixMeter:Update $w } proc tixMeter:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings } proc tixMeter:Update {w} { upvar #0 $w data # set the width of the canvas set W [expr $data(-width)-\ ([$data(w:root) cget -bd]+[$data(w:root) cget -highlightthickness]*2)] $data(w:canvas) config -width $W if {$data(-text) == ""} { set text [format "%d%%" [expr int($data(-value)*100)]] } else { set text $data(-text) } # (Create/Modify) the text item. # if {![info exists data(text)]} { set data(text) [$data(w:canvas) create text 0 0 -text $text] } else { $data(w:canvas) itemconfig $data(text) -text $text } set bbox [$data(w:canvas) bbox $data(text)] set itemW [expr [lindex $bbox 2]-[lindex $bbox 0]] set itemH [expr [lindex $bbox 3]-[lindex $bbox 1]] $data(w:canvas) coord $data(text) [expr $W/2] [expr $itemH/2+4] set H [expr $itemH + 4] $data(w:canvas) config -height [expr $H] set rectW [expr int($W*$data(-value))] if {![info exists data(rect)]} { set data(rect) [$data(w:canvas) create rectangle 0 0 $rectW 1000] } else { $data(w:canvas) coord $data(rect) 0 0 $rectW 1000 } $data(w:canvas) itemconfig $data(rect) \ -fill $data(-fillcolor) -outline $data(-fillcolor) $data(w:canvas) raise $data(text) } #---------------------------------------------------------------------- # Configuration #---------------------------------------------------------------------- proc tixMeter:config-value {w value} { upvar #0 $w data set data(-value) $value tixMeter:Update $w } proc tixMeter:config-text {w value} { upvar #0 $w data set data(-text) $value tixMeter:Update $w } proc tixMeter:config-fillcolor {w value} { upvar #0 $w data set data(-fillcolor) $value tixMeter:Update $w }