subsubsection3_8_4_4.html
subsection3_8_4.html
subsubsectionstar3_8_4_2.html
tableofcontents3_1.html
Next:
subsubsection3_8_4_4.html
The ConstructWidget Method
Up:
subsection3_8_4.html
Standard Initialization Methods
Previous:
subsubsectionstar3_8_4_2.html
Chaining Methods
The tixChainMethod call
The above implementation of
tixArrowButton:InitWidgetRec
is
correct but it may be cumbersome if we want to switch
superclasses. For example, suppose we want to create a new base class
TixArrowWidget, which presumably defines common attributes of any
class that have arrows in them. Then, instead of deriving
TixArrowButton directly from TixPrimitive, we decide to derive
TixArrowButton from TixArrowWidget, which is in turn derived from
TixPrimitive:
tixWidgetClass tixArrowWidget {
-superclass tixPrimitive
...
}
tixWidgetClass tixArrowButton {
-superclass tixArrowWidget
...
}
Now we would need to change all the method chaining calls in
TixArrowButton from:
tixPrimitive:SomeMethod
to:
tixArrowWidget:SomeMethod
This may be a lot of work because you may have chained methods in many
places in the original implementation of TixArrowButton.
The
tixChainMethod
command solves this problem. It will
automatically find a superclass that defines the method we want to
chain and calls this method for us. For example, the following is a
better implementation of
tixArrowButton:InitWidgetRec
that
uses
tixChainMethod
to avoid calling
tixPrimitive:InitWidgetRec
directly:
proc tixArrowButton:InitWidgetRec {w} {
upvar #0 $w data
tixChainMethod $w InitWidgetRec
set data(count) 0
}
Notice the order of the arguments for tixChainMethod: the name of
the instance,
$w
, is passed before the method we want to
chain,
InitWidgetRec
. In general, if the method we want to
chain has $1+n$arguments:
proc tixPrimitive:MethodToChain {w arg1 arg2 ... argn} {
...
}
We call it with the arguments in the following order
tixChainMethod $w MethodToChain $arg1 $arg2 ... $argn
We'll come back to more detailed discussion of
tixChainMethod
shortly. For the time being, let's take it for granted that
tixChainMethod
must be used in the three standard initialization
methods:
InitWidgetRec
,
ConstructWidget
and
SetBindings
http://tix.sourceforge.net
http://tix.sourceforge.net
