123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- # -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
- #
- # $Id: Variable.tcl,v 1.4 2001/12/09 05:04:02 idiscovery Exp $
- #
- # Variable.tcl --
- #
- # Routines in this file are used to set up and operate variables
- # for classes that support the -variable option
- #
- # 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.
- #
- # tixVariable:ConfigVariable --
- #
- # Set up the -variable option for the object $w
- #
- # Side effects:
- #
- # data(-variable) is changed to the name of the global variable
- # if the global variable exists, data(-value) takes the value of this
- # variable.
- # if the global variable does not exist, it is created with the
- # current data(-value)
- #
- # Return value:
- #
- # true is data(-value) is changed, indicating that data(-command)
- # should be invoked.
- #
- proc tixVariable:ConfigVariable {w arg} {
- upvar #0 $w data
- set changed 0
- if {$data(-variable) != ""} {
- uplevel #0 \
- [list trace vdelete $data(-variable) w "tixVariable:TraceProc $w"]
- }
- if {$arg != ""} {
- if {[uplevel #0 info exists [list $arg]]} {
- # This global variable exists, we use its value
- #
- set data(-value) [uplevel #0 set [list $arg]]
- set changed 1
- } else {
- # This global variable does not exist; let's set it
- #
- uplevel #0 [list set $arg $data(-value)]
- }
- uplevel #0 \
- [list trace variable $arg w "tixVariable:TraceProc $w"]
- }
- return $changed
- }
- proc tixVariable:UpdateVariable {w} {
- upvar #0 $w data
- if {$data(-variable) != ""} {
- uplevel #0 \
- [list trace vdelete $data(-variable) w "tixVariable:TraceProc $w"]
- uplevel #0 \
- [list set $data(-variable) $data(-value)]
- uplevel #0 \
- [list trace variable $data(-variable) w "tixVariable:TraceProc $w"]
- # just in case someone has another trace and restricted my change
- #
- set data(-value) [uplevel #0 set [list $data(-variable)]]
- }
- }
- proc tixVariable:TraceProc {w name1 name2 op} {
- upvar #0 $w data
- set varname $data(-variable)
- if {[catch {$w config -value [uplevel #0 [list set $varname]]} err]} {
- uplevel #0 [list set $varname [list [$w cget -value]]]
- error $err
- }
- return
- }
- proc tixVariable:DeleteVariable {w} {
- upvar #0 $w data
- # Must delete the trace command of the -variable
- #
- if {$data(-variable) != ""} {
- uplevel #0 \
- [list trace vdelete $data(-variable) w "tixVariable:TraceProc $w"]
- }
- }
|