Archetype - base class for all [incr Tk] mega-widgets
none
Name: clientData
Class: ClientData
Command-Line Switch: -clientdata
- This does not affect the widget operation in any way. It is
simply a hook that clients can use to store a bit of data with each
widget. This can come in handy when using widgets to build applications.
The
Archetype class is the basis for all
[incr Tk]
mega-widgets. It keeps track of component widgets and provides methods like
"configure" and "cget" that are used to access the
composite configuration options. Each component widget must be registered with
the
Archetype base class using the "
itk_component
add" method. When the component is registered, its configuration
options are integrated into the composite option list. Configuring a composite
option like "-background" causes all of the internal components to
change their background color.
It is not used as a widget by itself, but is used as a base class for more
specialized widgets. The
Widget base class inherits from
Archetype, and adds a Tk frame which acts as the "hull" for
the mega-widget. The
Toplevel base class inherits from
Archetype, but adds a Tk toplevel which acts as the "hull".
Each derived class must invoke the itk_initialize method
within its constructor, so that all options are properly integrated and
initialized in the composite list.
The following methods are provided to support the public interface of the
mega-widget.
-
pathName cget option
- Returns the current value of the configuration option given
by option.
In this case, option refers to a composite configuration option for
the mega-widget. Individual components integrate their own configuration
options onto the composite list when they are registered by the "
itk_component add" method.
-
pathName component ?name? ?command
arg arg ...?
- Used to query or access component widgets within a
mega-widget. With no arguments, this returns a list of symbolic names for
component widgets that are accessible in the current scope. The symbolic
name for a component is established when it is registered by the "
itk_component add" method. Note that component widgets obey
any public/protected/private access restriction that is in force when the
component is created.
If a symbolic name is specified, this method returns the window path
name for that component.
Otherwise, the command and any remaining arg arguments are
invoked as a method on the component with the symbolic name name.
This provides a well-defined way of accessing internal components without
relying on specific window path names, which are really details of the
implementation.
-
pathName configure ?option? ?value
option value ...?
- Query or modify the configuration options of the widget. If
no option is specified, returns a list describing all of the
available options for pathName (see Tk_ConfigureInfo for
information on the format of this list). If option is specified
with no value, then the command returns a list describing the one
named option (this list will be identical to the corresponding sublist of
the value returned if no option is specified). If one or more
option-value pairs are specified, then the command modifies the
given widget option(s) to have the given value(s); in this case the
command returns an empty string.
In this case, the options refer to composite configuration options
for the mega-widget. Individual components integrate their own
configuration options onto the composite list when they are registered by
the " itk_component add" method.
The following methods are used in derived classes as part of the implementation
for a mega-widget.
-
itk_component add ?-protected?
?-private? ? --? name createCmds
?optionCmds?
- Creates a component widget by executing the
createCmds argument and registers the new component with the
symbolic name name. The -protected and -private
options can be used to keep the component hidden from the outside world.
These options have a similar effect on component visibility as they have
on class members.
The createCmds code can contain any number of commands, but it must
return the window path name for the new component widget.
The optionCmds script contains commands that describe how the
configuration options for the new component should be integrated into the
composite list for the mega-widget. It can contain any of the following
commands:
-
ignore option ?option option ...?
- Removes one or more configuration options from the
composite list. All options are ignored by default, so the ignore
command is only used to negate the effect of a previous keep or
rename command. This is useful, for example, when the some of the
options added by the usual command should not apply to a particular
component, and need to be ignored.
-
keep option ?option option ...?
- Integrates one or more configuration options into
the composite list, keeping the name the same. Whenever the mega-widget
option is configured, the new value is also applied to the current
component. Options like "-background" and "-cursor"
are commonly found on the keep list.
-
rename option switchName resourceName
resourceClass
- Integrates the configuration option into the
composite list with a different name. The option will be called
switchName on the composite list. It will also be modified by
setting values for resourceName and resourceClass in the X11
resource database. The "-highlightbackground" option is commonly
renamed to "-background", so that when the mega-widget
background changes, the background of the focus ring will change as
well.
-
usual ?tag?
- Finds the usual option-handling commands for the specified
tag name and executes them. If the tag is not specified,
then the widget class name is used as the tag name. The
"usual" option-handling commands are registered via the
usual command.
If the
optionCmds script is not specified, the usual option-handling
commands associated with the class of the component widget are used by
default.
-
itk_component delete name ?name name
...?
- Removes the component widget with the symbolic name
name from the mega-widget. The component widget will still exist,
but it will no longer be accessible as a component of the mega-widget.
Also, any options associated with the component are removed from the
composite option list.
Note that you can destroy a component using the destroy command, just
as you would destroy any Tk widget. Components automatically detach
themselves from their mega-widget parent when destroyed, so "
itk_component delete" is rarely used.
-
itk_initialize ?option value option
value...?
-
This method must be invoked within the constructor
for each class in a mega-widget hierarchy. It makes sure that
all options are properly integrated into the composite option list, and
synchronizes all components to the initial option values. It is usually
invoked near the bottom of the constructor, after all component widgets
have been added.
If any option/value pairs are specified, they override
settings determined from the X11 resource database. The arguments to the
constructor are usually passed along to this method as follows:
itcl::class MyWidget {
inherit Widget
constructor {args} {
.
.
.
eval itk_initialize $args
}
}
-
itk_option add optName ?optName optName
...?
- Adds one or more options to the composite option list for a
mega-widget. Here, optName can have one of the following
forms:
-
component.option
- Accesses an option belonging to a component with the
symbolic name component. The option name is specified
without a leading " -" sign.
-
className::option
- Accesses an option defined by the
"itk_option define" command in class className.
The option name is specified without a leading "
-" sign.
Options are normally integrated into the composite option list when a component
widget is first created. This method can be used to add options at a later
time. For example, the
Widget and
Toplevel base classes keep
only the bare minimum options for their "hull" component:
-background and -cursor. A derived class can override this decision, and add
options that control the border of the "hull" component as well:
itcl::class MyWidget {
inherit Widget
constructor {args} {
itk_option add hull.borderwidth hull.relief
itk_component add label {
label $itk_interior.l1 -text "Hello World!"
}
pack $itk_component(label)
eval itk_initialize $args
}
}
-
itk_option define switchName resourceName
resourceClass init ? config?
- This command is used at the level of the class definition
to define a synthetic mega-widget option. Within the configure and
cget methods, this option is referenced by switchName, which
must start with a " -" sign. It can also be modified by
setting values for resourceName and resourceClass in the X11
resource database. The init value string is used as a last resort
to initialize the option if no other value can be used from an existing
option, or queried from the X11 resource database. If any config
code is specified, it is executed whenever the option is modified via the
configure method. The config code can also be specified
outside of the class definition via the configbody command.
In the following example, a synthetic "-background" option is
added to the class, so that whenever the background changes, the new value
is reported to standard output. Note that this synthetic option is
integrated with the rest of the "-background" options that have
been kept from component widgets:
itcl::class MyWidget {
inherit Widget
constructor {args} {
itk_component add label {
label $itk_interior.l1 -text "Hello World!"
}
pack $itk_component(label)
eval itk_initialize $args
}
itk_option define -background background Background #d9d9d9 {
puts "new background: $itk_option(-background)"
}
}
-
itk_option remove optName ?optName optName
...?
- Removes one or more options from the composite option list
for a mega-widget. Here, optName can have one of the forms
described above for the " itk_option add" command.
Options are normally integrated into the composite option list when a
component widget is first created. This method can be used to remove
options at a later time. For example, a derived class can override an
option defined in a base class by removing and redefining the option:
itcl::class Base {
inherit itk::Widget
constructor {args} {
eval itk_initialize $args
}
itk_option define -foo foo Foo "" {
puts "Base: $itk_option(-foo)"
}
}
itcl::class Derived {
inherit Base
constructor {args} {
itk_option remove Base::foo
eval itk_initialize $args
}
itk_option define -foo foo Foo "" {
puts "Derived: $itk_option(-foo)"
}
}
Without the "
itk_option remove" command, the code fragments
for both of the "-foo" options would be executed each time the
composite "-foo" option is configured. In the example above, the
Base::foo option is suppressed in all Derived class widgets, so only the
Derived::foo option remains.
Derived classes can find useful information in the following protected
variables.
- itk_component(name)
- The "itk_component" array returns the real window
path name for a component widget with the symbolic name name. The
same information can be queried using the component method, but
accessing this array is faster and more convenient.
- itk_interior
- This variable contains the name of the window that acts as
a parent for internal components. It is initialized to the name of the
"hull" component provided by the Widget and
Toplevel classes. Derived classes can override the initial setting
to point to another interior window to be used for further-derived
classes.
- itk_option(option)
- The "itk_option" array returns the current option
value for the composite widget option named option. Here, the
option name should include a leading " -" sign.
The same information can be queried using the cget method, but
accessing this array is faster and more convenient.
itk, Widget, Toplevel, mega-widget