AW from the source code of itcl3.3:
/* itcl::configbody <class>::<publicVar> <body>
*
* Looks for an existing public variable with the name <publicVar>,
* and if found, tries to assign the implementation. If <body> has
* the form "@name" then it is treated as a reference to a C handling
* procedure; otherwise, it is taken as a body of Tcl statements.
*/
As far as I understand it: if you assign a public variable a value with the itcl configure command (
myclass configure -myvar Hello) then first the new value is assigned to that variable and afterwards the script in configbody is evaluated additionally.
It is also possible to define a config script for a variable when defining the variable:
protected variable myvar hello {puts "this is the configscript of myvar"}
GWM at last it becomes vaguely less fog encrusted. When the program (or user) changes a public variable by use of the
configure -<VARNAME> newvalue option, then the
configbody is called rather like a
trace or
Itcl trace. So here is the simplest clear example I can conceive (this is not a competition).
console show; update idletasks
package require Itcl
itcl::class sampleconf { ;# a sample class with a single public variable
public variable publicv ;# this var is adjusted using the configure -publicv...
constructor {} { }
method setpublicv {dn} { set publicv "$dn" }
}
# create a sample instance of the class:
set btn [sampleconf h2]
# add a configbody for publicv
itcl::configbody sampleconf::publicv {tk_messageBox -message "Publicv in $this was set to $publicv by a configure command."}
h2 configure -publicv "A new Value"
# change the publicv by configure and you see a message box.
h2 configure -publicv "The same old Value"
h2 setpublicv "A value which is not sent via the configbody"
# change the publicv again by configure and again you see a message box.
h2 configure -publicv "Another Value"
Note that the
configbody applies to all instances of
sampleconf, but that changing the value of
publicv (by calling method
setpublicv) does
not call the
configbody.