2 [incr Tcl] - CHANGE LOG
3 ==========================================================================
4 ----------------------- CHANGES FROM itcl-1.5 --------------------------
5 ==========================================================================
7 Release itcl-2.0 provides a new syntax for defining classes. The
8 new syntax is accessed using the new "itcl::class" command. For the
9 time being, the old syntax will be supported via the old "itcl_class"
10 command, but support for this will be phased out over time.
12 Because both syntaxes are supported, the new version is "backward
13 compatible" with the previous itcl-1.5 release. However, there are
14 some semantic changes that may break existing scripts. These are
15 listed in detail in the section "INCOMPATIBLE CHANGES".
18 CATALOG OF NEW COMMANDS
19 --------------------------------------------------------------------------
20 Following is a brief catalog of new commands available in this release.
22 == Tcl with Namespaces =================================================
24 delete namespace name ?name...?
26 Deletes one or more namespaces, destroying all commands, variables,
27 and child namespaces within it.
31 option optName arglist body
32 option optName arglist body
35 option subOptName arglist body
36 option subOptName arglist body
41 Adds options to an ensemble called "name". If the ensemble does
42 not already exist, it is created automatically. An "ensemble" is
43 a toplevel command that groups a collection of sub-commands. For
44 example, the usual Tcl "info" command is an ensemble with options
45 like "globals", "level", "tclversion", etc.
47 Ensembles are good for two reasons. First, new options can be
48 integrated in without modifying any source code or "switch"
49 statements. For example, [incr Tcl] adds the "info classes"
50 and "info objects" commands simply by adding options to the
51 "info" ensemble. Second, error messages are generated automatically
52 by the ensemble mechanism. Try invoking "info" with no options
55 Each option declaration is just like a Tcl proc declaration,
56 with an option name, arglist and body. Ensembles can also
57 contain sub-ensembles with more options.
60 import add name ?name...? ?-where pos...?
62 import list ?importList?
63 import remove name ?name...?
65 Used to manipulate the "import" list for the current namespace.
66 When one namespace imports another, it gains access to all of
67 its public commands/variables as if they were part of the
68 same namespace. In other words, one namespace can be integrated
69 seamlessly into another by adding it to the import list of the
70 other namespace. By default, each namespace imports its parent,
71 so most namespaces import the global scope in some fashion.
73 The form "import list" is used to query or set the import list
74 for the current namespace. The form "import all" returns the
75 namespace search path that is consulted when commands/variables
81 Returns the current namespace context. The global namespace
82 context is reported here as "", so it is easy to build
83 namespace paths like this:
85 set path "[info context]::name"
88 info namespace all ?pattern?
90 Returns a list of namespaces found in the current namespace
91 context, whose names match an optional string pattern. This
92 includes children of the current namespace, and children of
93 all imported namespaces.
96 info namespace children ?name?
98 Returns a list of child namespaces for namespace "name",
99 or for the current namespace if "name" is not specified.
102 info namespace parent ?name?
104 Returns the parent namespace for namespace "name", or
105 for the current namespace if "name" is not specified.
108 info namespace qualifiers string
110 Parses a string of the form "namesp::namesp::name", and returns
111 the leading "namesp::namesp" scope qualifiers.
114 info namespace tail string
116 Parses a string of the form "namesp::namesp::name", and returns
117 the trailing "name" element.
120 info protection ?-command? ?-variable? name
122 Returns the protection level for an element. By default, "name"
123 is treated as a command name, but the "-command" or "-variable"
124 flags can be used to request a specific treatment.
127 info which ?-command? ?-variable? ?-namespace? name
129 Reports the full namespace path (e.g., "::namesp::namesp::name")
130 for an element. By default, "name" is treated as a command name,
131 but the "-command", "-variable" and "-namespace" flags can be
132 used to request a specific treatment.
135 namespace name ?-local? ?-enforced val? ?--? ?commands?
137 This is the usual mechanism for creating a namespace and defining
140 If namespace "name" does not exist, it is created automatically.
141 The namespace name may include a full namespace path (e.g.,
142 "namesp::namesp::namesp"). During the search for this namespace,
143 all imported namespaces are consulted. If the "-local" flag is
144 specified, then the search is restricted to the local namespace;
145 this prevents against accidentally importing a namespace if the
146 intent is to create a child namespace.
148 If the "-enforced" flag is specified, then "val" is treated as a
149 boolean value; if true, then command/variable enforcement is
150 turned on for this namespace. Each time a new command is
151 referenced within the namespace, Tcl automatically calls a
156 with the <name> of the command that is about to be executed. The
157 "enforce_cmd" proc can return an error, and access to that command
158 will be denied. It can return another command name, or a more
159 specific namespace path, and that command will be used instead.
160 Or it can return "", and command lookup will continue via the
161 normal namespace rules (i.e., in local scope, imported namespaces,
164 Each time a new variable is referenced within an enforced
165 namespace, Tcl automatically calls a procedure:
169 with the <name> of a global variable that is being referenced.
170 The "enforce_var" proc can return an error, and access to that
171 variable will be denied. It can return another variable name,
172 or a more specific namespace path, and that variable will be
173 used instead. Or it can return "", and variable lookup will
174 continue via the normal namespace rules (i.e., in local scope,
175 imported namespaces, etc.).
177 Note that command/variable enforcement done at the Tcl language
178 level can be slow. There is also a C language interface for
179 the same functionality, which offers much better performance.
181 The namespace is first found and updated with whatever flags were
182 specified. After that, if a "commands" string was specified, it
183 is executed in the context of the namespace.
186 public command ?arg arg...?
187 protected command ?arg arg...?
188 private command ?arg arg...?
190 These commands attach a particular protection level to whatever
191 commands or variables are created while executing the specified
192 command. They are used in conjunction with commands like
193 "proc" and "variable" to create public/protected/private elements.
197 code ?-namespace name? command ?arg arg ...?
198 @scope namespace value
200 The "scope" command takes a string and encodes it into an "@scope"
201 declaration. The "code" command performs a similar function,
202 but accepts multiple arguments and is usually used to wrap up
203 code fragments. The "@scope" declaration keeps a value (like a
204 variable name or code fragment) together with its context
205 namespace. It can be executed like an ordinary command:
207 set cmd {@scope :: puts}
210 or used as an ordinary variable name:
212 set var {@scope :: auto_path}
213 lappend $var /usr/local/mylib
215 The difference, however, is that an "@scope" value bypasses the
216 usual access protections and guarantees that values have the
219 Ordinary variable names refer to variables in the global
220 namespace. Ordinary code fragments are usually interpreted
221 by extensions like Tk in the global namespace. The "scope"
222 and "code" commands are used to wrap up variable names and
223 code fragments to preserve the namespace context. For example:
226 private variable state 0
227 private proc show_state {mesg} {
232 checkbutton .cb -text "Toggle" \
233 -variable [scope state] \
234 -command [code show_state "current state"]
239 In this example, the checkbutton is tied to the variable
240 "foo::state" and executes the command "foo::show_state"
241 whenever it is pressed.
243 When a Tk widget uses commands and variables within a
244 namespace, these names should be wrapped up as scoped
245 values, as shown above.
248 variable name ?value?
249 Creates a variable called "name" and initializes it to an optional
250 value. This is normally used in conjunction with public, protected
251 and private commands to declare variables within a namespace:
258 If the variable "name" already exists, it updated to have
259 the protection level that is currently active.
262 == Tk with Namespaces ==================================================
266 Recognizes and expands the following fields within command
269 %q => Replaced with the fully-qualified access command
270 for the widget receiving the event. For example,
274 button .b -text "Hello World!"
278 The fully-qualified access command for this widget
279 is "::foo::bar::.b". The "%q" field should be used
280 instead of "%W" as the widget access command:
282 bind Button <Key-Return> "%q flash; %q invoke"
285 %M => Replaced with the window path name of the mega-widget
286 containing the window receiving the event. For example,
287 if an "entryfield" mega-widget ".x" contains an entry
288 widget ".x.entry", bindings added to ".x.entry" will
289 replace "%M" with ".x". This allows generic bindings
290 to be added to component widgets which affect the
291 mega-widget as a whole.
293 For this to work properly, mega-widget packages must
294 register their component widgets using Itk_SetMegaWidget().
299 Returns the fully-qualified access command for the widget "window".
300 This is equivalent to the "%q" field in bindings, and is useful
301 in procedures where the only the window name is known:
303 foreach kid [winfo children $win] {
304 [winfo command $kid] configure -bg blue
308 winfo megawidget window
310 Returns the window path name of the mega-widget containing "window"
311 as a component. This is equivalent to the "%M" field in bindings,
312 and is useful in procedures where only the component window name
313 is known. For this to work properly, mega-widget packages must
314 register their component widgets using Itk_SetMegaWidget().
317 == [incr Tcl] ==========================================================
319 delete class name ?name...?
321 Deletes one or more object classes. Deleting a class also
322 causes all derived classes, and all objects belonging to the
323 class, to be deleted as well.
326 delete object name ?name...?
328 Deletes one or more objects. If the access command for an
329 object resides in another namespace, then the full namespace
332 delete object foo::bar::x
335 info classes ?pattern?
337 Returns a list of all classes in the current namespace
338 whose names match an optional string pattern.
341 info objects ?-class className? ?-isa className? ?pattern?
343 Returns a list of all objects whose names match an optional
344 string pattern. If the "-class" option is specified, then
345 the list is further restricted to those objects whose
346 most-specific class is "className". If the "-isa" option
347 is specified, then the list is further restricted to those
348 objects who belong to class "className".
351 itcl::class name { definition }
353 Used to create define a new class "name". The "definition"
356 inherit baseClass ?baseClass...?
358 constructor arglist ?init? body
361 method name ?arglist? ?body?
362 proc name ?arglist? ?body?
363 variable name ?init? ?config?
366 public command ?arg arg...?
367 protected command ?arg arg...?
368 private command ?arg arg...?
370 Note that the constructor statement has changed to include an
371 optional "init" argument. This is an initialization statement
372 that can be used to call out base class constructors. If it
373 is not included, base classes are constructors are invoked
374 automatically without any arguments.
376 The "variable" statement is now used to create object-specific
377 data members. The "common" statement is used to create "common"
378 variables, which are global within the class namespace. Both
379 types of variables can be designated public, protected or
383 itcl::body class::func arglist body
385 Used to define the body of a class member function outside of
386 the class definition. If "body" declarations are kept in a
387 separate file, they can be sourced again and again to test
388 changes as bugs are fixed. If an "arglist" is specified in
389 the class definition, then the "arglist" for the body definition
390 must have the same meaning.
393 itcl::configbody class::option body
395 Similar to the "body" command, but used to define the configuration
396 code for a public variable.
399 itcl_class name { old-style-definition } \__ backward compatibility
400 itcl_info option ?arg arg...? /
403 == [incr Tk] ===========================================================
407 itk_option define -switch resName resClass initVal ?configCode?
410 The "itk_option define" command is recognized at the level of
411 the class definition. It defines a new mega-widget option with
412 the given switch name and X11 resource database names. The
413 "initVal" is used as a last resort to initialize the option
414 if no other value can be queried from the X11 resource database.
415 If "configCode" is specified, it is executed whenever the option
416 is modified via the "configure" method. The "configCode" can
417 also be specified outside of the class definition via the
418 "itcl::configbody" command.
421 Methods provided by itk::Archetype base class:
425 component name command ?arg arg...?
427 Used to query or access components within a mega-widget. With
428 no arguments, this returns a list of component widgets that
429 are accessible in the current scope. Note that component
430 widgets obey any public/protected/private access restriction
431 that is in force when the component is created.
433 With one argument, this returns the window path name for a
434 component with the symbolic name "name".
436 In any other case, the remaining arguments are invoked as a
437 method on the component with the symbolic name "name".
442 configure option value ?-switch value...?
444 Works just like the usual Tk configure method, but for mega-widgets.
445 Here options are really composite widget options. When set, they
446 trigger changes to many different internal components, and may
447 invoke many bits of "configCode" for options defined by "itk_option
448 define". However, there is only one value for the composite option.
453 Works just like the usual Tk cget method, but for mega-widgets.
454 Returns the current value for a composite widget option.
457 itk_component add name {create-commands} ?{option-commands}?
459 Adds a new mega-widget component with the symbolic name "name".
460 Invokes the "create-commands" to create the component, and
461 invokes "option-commands" to integrate its options into the
462 composite list. By default, no options are integrated. Options
463 may be added using the following commands:
465 keep option ?option...?
466 ignore option ?option...?
467 rename oldswitch newswitch resname resclass
471 itk_component delete name ?name...?
473 Deletes an existing mega-widget component with the symbolic
474 name "name". The component will still exist as a widget,
475 but it will no longer be accessible as a component for this
476 mega-widget. Any options associated with the component are
477 removed from the composite list.
479 Note that you can destroy a component like any ordinary widget:
483 Components automatically detach themselves from their mega-widget
484 parent when destroyed, so "itk_component delete" is not used
488 itk_option add option ?option...? \__ class::option
489 itk_option remove option ?option...? / component.option
491 Adds or removes an option from the composite option list for
492 a mega-widget. These commands cannot be used at the level of
493 the class definition; they must be invoked for a particular
494 mega-widget. They usually appear in the constructor for a
495 mega-widget class, to add or redefine options in components
496 created by a base class. For example, the base classes
497 itk::Toplevel and itk::Widget keep only the bare minimum
498 options for their "hull" component: -background and -cursor.
499 If you want your mega-widget to have a border around it, you
500 can add the hull options back in:
502 itcl::class MyWidget {
506 itk_option add hull.borderwidth hull.relief
511 itk_initialize ?option value option value...?
513 Initializes the composite option list for a mega-widget.
514 This method should be invoked within the constructor for each
515 mega-widget class. It is usually included the end of the
516 constructor, below the component creation code. It integrates
517 all "itk_option" options defined in the current class into
518 the composite configuration list, and includes "-option value"
519 settings usually received as arguments to the constructor.
520 When this is executed in the most-specific class, it scans
521 through the composite option list and makes sure that all
522 options have been properly initialized.
524 itk::usual tag ?commands?
526 Used outside of a mega-widget class definition to declare
527 the "usual" option-handling commands for the mega-widget.
528 These commands suggest how the configuration options should
529 be handled if the mega-widget becomes a component of an even
530 larger mega-widget. They include commands like "keep" and
535 --------------------------------------------------------------------------
537 >> Object construction/destruction now follows C++ model.
539 In the previous release, object construction started at the
540 most-specific constructor. Base class constructors could
541 be called out explicitly within the body of a constructor.
542 If they were not, they were invoked implicitly when the
543 constructor finished executing. This led to a construction
544 model that was backward from C++, and contrary to what most
545 people expected. Destructors were backwards in a similar
548 In the current release, object construction starts at the
549 least-specific class in the hierarchy, and proceeds to the
550 most-specific class. Therefore, each base class is fully
551 constructed before the derived class constructor is executed.
553 Arguments are now passed to base class constructors through
554 an optional "initialization" statement. This statement is
555 included between the argument list and the body of the
556 constructor, so the syntax is reminiscent of C++:
560 ...constructor body...
565 constructor {x y z} {
566 Base::constructor $x $y << "initialization"
568 ...constructor body...
572 Note that variables from the argument list (e.g., $x and $y)
573 can be referenced within the initialization statement. With
574 multiple inheritance, each of the base class constructors
575 can be called out individually.
577 Object destruction is the exact opposite of construction.
578 It proceeds from most-specific to least-specific class.
581 >> All class methods are now implicitly virtual
583 In the previous release, all method names were interpreted
584 with respect to the current class scope and its base classes.
585 If you wanted a method to act virtual, you had to explicitly
586 preface it with the "virtual" command each time you used it.
587 This proved to be error prone.
589 In the new release, all methods are virtual by default. If
590 you invoke a method with a simple name, the most-specific
591 method with that name will be invoked, regardless of your
595 constructor {} {show}
596 method show {} {puts "Base::show"}
600 constructor {} {show}
601 method show {} {puts "Derived::show"}
604 The method "show" called out in the constructors for both of
605 these classes is virtual. When Base::constructor is executed
606 it finds the most-specific "show" method and prints
607 "Derived::show". When Derived::constructor is executed, it
608 finds the most-specific "show" method and prints "Derived::show"
611 If you want to invoke a particular method, you have to scope
615 constructor {} {Base::show}
616 method show {} {puts "Base::show"}
620 constructor {} {Derived::show}
621 method show {} {puts "Derived::show"}
625 >> Within class methods/procs the "global" command now refers to
626 variables within the class namespace.
628 In the previous release, the "global" command was used to
629 access variables at the global scope. The "global" command
630 now refers to variables that are "global" within the current
631 namespace context. Within the scope of a class, this refers
632 to "global" class variables. Note that common data members
633 are global variables, but they can be accessed transparently,
634 without any special "global" declaration. You can also create
635 ordinary global variables within a class, but you will have to
636 declare them each time they are used with a "global" statement.
637 The new scheme will allow classes to have their own private
638 global variables (e.g., for interacting with widgets) without
639 flooding the global namespace.
641 If you really want to access a variable at the "::" global
642 scope, use its complete path name:
645 method getenv {name} {
652 >> "this" variable used to be included in every class scope
654 In the previous release, each class scope included a separate
655 "this" variable containing the object name. There is now only
656 one "this" variable, kept in the most-specific class scope.
657 It can still be referenced as if it belongs to all classes,
658 e.g., "Base::this", "Derived::this".
660 This change is probably not important to most applications.
661 But it did break my test suite, which expected to find many
662 different "this" variables coming back from the "info" command.
665 >> "this" variable now contains complete namespace path for the
666 object access command
668 This change will break many scripts written for mega-widgets.
669 In the previous release, mega-widgets had a window name and an
670 access command name that were interchangeable. For example,
671 you would create a widget ".dialog" and configure it using
672 the ".dialog" command. Inside of this widget there was a
673 "this" variable containing the name ".dialog".
675 In the current release, an object can exist in any namespace,
676 so the complete namespace path is a part of the object's
677 identity. Instead of just ".dialog", the "this" variable will
678 now contain a name like "::.dialog" or "::foo::.dialog". But
679 the window name is still just ".dialog".
681 Scripts that used to use "$this" as a window name:
683 wm title $this "Dialog"
685 must now use the [incr Tk] "hull" component instead:
687 wm title $itk_component(hull) "Dialog"
689 If for some other reason you need the simple object name at the
690 end of the namespace path, you can get at it using the
691 "info namespace tail" command:
693 set oldthis [info namespace tail $this]
696 >> "#auto" generated names now start with lower-case letter
698 In the previous release, "#auto" could be used in place of
699 an object name to produce an automatically generated name:
701 Toaster #auto -heat light
703 The names were generated by adding a unique number onto the
704 class name: "Toaster0", "Toaster1", etc.
706 The current release supports the same functionality, except
707 that the names generated are guaranteed to start with a
708 lowercase letter: "toaster0", "toaster1", etc. This helps
709 out in the mega-widget arena, where window names must start
710 with lowercase letters.
713 >> "config" argument used to allow multiple default values
715 The magic "config" argument used to allow multiple default
716 values, which were simply concatenated into a single value
717 before processing. For example, in the previous release
721 method test {x y {config -foo 0 -bar 0}} {
726 and if the "test" method was used without extra configuration
727 arguments, they would default to "-foo 0 -bar 0".
729 In the current release, you must make the default value for
730 a "config" argument a single string:
733 method test {x y {config "-foo 0 -bar 0"}} {
738 >> "info class" now acts "virtual"
740 In the previous release, the "info class" command would report
741 the current class context. In a base class method, it would
742 report the base class name, and in a derived class method, it
743 would report the derived class name. If you wanted to know
744 the most-specific class for an object, you would have to use
745 the "virtual" command explicitly:
749 return [virtual info class]
753 The "info" command is now virtual by default, as long as an
754 object context is present. This means that you can drop the
763 If you really want to know the current class scope, use the
764 "info context" command instead to query the current namespace
767 If an object context is not present (i.e., in the body of a
768 common class "proc"), the "info class" command reverts to
769 the current class context, the same as the "info context" command.
772 >> Library procedures "itcl_unload" and "itcl_reload" have been removed
774 In the previous release, the library procedure "itcl_unload"
775 provided a way of deleting a class. You can now do the same
776 thing using the "delete class" command:
780 This deletes the specified class, all derived classes, and all
781 objects belonging to this class. If autoloading is set up,
782 you can reload a deleted class just by invoking its name.
783 The old "itcl_reload" function is now trivial:
785 proc itcl_reload {class} {
791 >> Class definition no longer recognizes ordinary Tcl commands.
793 As an undocumented "feature" of the previous release, you could
794 include ordinary Tcl commands in the body of your class definition.
804 In the new release, only class definition commands are allowed
805 within the body of a class definition. You can, however, use Tcl
806 commands outside of the class definition to modify the class
807 definition as a string, and then define the class:
810 method test {} {return "test"}
813 append defn "public variable foo"
819 --------------------------------------------------------------------------
821 >> an object can be renamed by renaming its access command
823 In the previous release, an object's identity was fixed when
824 it was created. In the new release, the object is tied
825 directly to its access command. If you rename the access
826 command, you have renamed the object. The "this" variable
827 automatically keeps in sync with name changes. If you delete
828 the access command, you automatically delete the object.
830 Toaster new -heat light
831 rename new fred << rename Toaster
834 rename fred "" << delete Toaster
837 >> Bodies of methods, procs and public variables can be defined
838 outside of the class definition, and can be redefined on the fly.
840 In the previous release, all of the code related to a class was
841 defined within the class definition. This kept everything
842 together in one place, but it made it difficult to get an overview
843 of the class interface.
845 In the new release, bodies can be defined outside of the class
846 definition, perhaps in a separate file. When debugging, the
847 implementations can be fixed and sourced again and again, without
848 having to delete existing objects and classes.
850 Use the "itcl::body" command to redefine the body of a class
851 method or proc. Use "itcl::configbody" to redefine the configuration
852 code associated with a public variable. For example:
854 itcl::class Toaster {
860 error "cannot destroy dirty toaster: clean first"
864 method toast {nslices}
867 public variable heat 3
868 protected variable crumbs 0
871 itcl::body Toaster::toast {nslices} {
872 if {$nslices < 1 || $nslices > 2} {
873 error "bad number of slices: should be 1 or 2"
875 set crumbs [expr $crumbs+$heat*$nslices]
877 puts stderr "== FIRE! FIRE! =="
881 itcl::body Toaster::clean {} {
885 itcl::configbody Toaster::heat {
886 if {$heat < 1 || $heat > 5} {
887 error "invalid setting \"$heat\": should be 1-5"
891 If an argument list is specified in the class definition, then
892 the same argument list must be used when the implementation is
893 redefined. The variable names can change, but the meaning of
894 the arguments must be the same. If you leave the argument
895 list out of the class definition, or if you include the "args"
896 argument, the argument list can change.
899 >> C procedures can be integrated into class definitions
901 Any method body that is specified as "@symbol" is treated as a
902 reference to a C procedure with the symbolic name "symbol".
903 Symbolic names are established by registering C procedures
904 via the Itcl_RegisterC() procedure. This is usually done
905 when the interpreter starts up in the Tcl_AppInit() procedure:
907 if (Itcl_RegisterC(interp, "foo", My_FooCmd) != TCL_OK) {
911 This registers a procedure My_FooCmd() with the symbolic name
912 "foo". It can be used as the implementation for a class method,
913 proc, or bit of configuration code simply by specifying "@foo"
914 in place of the Tcl code body.
916 These C procedures are just like ordinary Tcl command handlers.
917 They take the usual arguments:
919 int My_FooCmd(ClientData cdata, Tcl_Interp *interp,
920 int argc, char** argv)
926 including the (argc,argv) arguments from the command line. But
927 before these procedures are invoked, the proper class scope is
928 established so that object data members can be accessed as if
929 they were ordinary variables via Tcl_GetVar() and Tcl_SetVar().
931 Look at the [incr Tk] base class itk::Archetype as an example
932 for integrating C code.
935 >> "#auto" can be buried within an object name: ".x.y.z.#auto"
937 In the previous release, "#auto" was a keyword that could be
938 used in place of an object name. It can now be used as a
939 part of the object name, making it easier to generate automatic
940 names for mega-widgets.
943 >> Every object now has built-in "configure" and "cget" methods
944 that follow the Tk paradigm. For [incr Tk] widgets, they follow
945 the paradigm exactly. The ordinary [incr Tcl] objects, the
946 X11 resource values are missing.
949 >> There is no longer a built-in "delete" method, so classes can
950 define their own "delete" operations.
952 Instead of "objName delete", use the new "delete object" command:
954 Toaster fred -heat dark
958 >> All data members can be declared public, protected or private.
960 Private data members can only be accessed in the class where
961 they are defined. Protected data members can be accessed in
962 the defining class and all derived classes. Public data members
963 can be accessed like protected data members, but are also
964 recognized as configuration options by the built-in "configure"
968 >> In [incr Tk], options are now defined outside of the constructor,
969 at the level of the class definition.
972 >> In [incr Tk], configuration options belonging to components
973 created in a base class can be added or removed in derived
976 The base classes "itk::Toplevel" and "itk::Widget" are now stripped
977 down to the bare minimum options. For example, if you want to add
978 "-width" and "-height" options for the hull component, do this using
979 the "itk_option" command in the body of the constructor:
985 itk_option add hull.widget hull.height
990 Options can be added and removed on-the-fly during normal operation,
991 but this is not recommended, since it could lead to a confusing
995 >> In [incr Tk], components can now be added or removed on-the-fly.
997 The "itk_component" method now supports "add" and "delete"
998 operations that are used to add/delete components.
1001 >> All [incr Tk] widgets can be destroyed like normal Tk widgets.
1003 If you destroy a component widget, for example, it will automatically
1004 remove itself from its parent via "itk_component delete". Likewise,
1005 when a parent widget is destroyed, it will automatically destroy
1006 all component widgets.
1009 >> In [incr Tk], the "itk::Archetype::component" method now provides
1010 access to mega-widget components.
1012 In the previous [incr Tk] prototype, the "component" method had
1013 a different syntax and only supported query operations. You can
1014 now access an internal component via the "component" method using
1017 .dialog component hull configure -width 450 -height 500
1019 This example accesses the "hull" component of the ".dialog"
1020 mega-widget, and sets the width and height options.
1022 ==========================================================================
1023 ---------------------- RELEASE 2.0beta - 9/6/95 ------------------------
1024 ==========================================================================
1027 Fixed menus to work properly within namespaces. Menu library code
1028 now recognizes the proper namespace context for all "-menu" options.
1030 9/8/95 (new feature)
1031 Added "winfo command name" option to report the scoped access command
1034 9/8/95 (configuration changes)
1035 - fixed "sed" invocation in iwidgets Makefile
1036 - added configuration guesses for Tadpole Sparcbook
1037 - added George Howlett's test for "gcc", so that "-fwritable-strings"
1038 is added even if gcc is masquerading as "cc"
1039 - fixed tcl/tk configure scripts to have default prefix "/usr/local/itcl"
1040 or wherever itclsh/itkwish is installed
1041 - fixed makefiles to use $(MAKE) instead of "make"
1044 Protected references to obj->accessCmd to avoid seg faults when
1045 an object is being destroyed.
1047 9/9/95 (new features)
1048 Changed the syntax of the "namespace" command:
1050 namespace name ?-local? ?-hidden val? ?-enforced val? ?--? ?commands?
1052 Flags now follow the namespace name, and the "commands" body is
1053 optional. The "-hidden" option allows a namespace to be hidden
1054 during "info namespace all" queries. The "-enforced" option turns
1055 command/variable enforcement on or off.
1057 Update "info namespaces all" command to allow for display of hidden
1058 namespaces: info namespaces all ?-hidden? ?pattern?
1061 Fixed "auto_mkindex" to work properly for procs defined within
1062 namespaces. Added support for itcl::class, itcl::body and
1063 itcl::configbody as well. Added tests for tclIndex file generation.
1065 9/11/95 (configuration changes)
1066 Fixed makefiles to reference sources and libraries properly, so
1067 it should be possible to build different object trees for
1068 different platforms with "gmake".
1070 9/13/95 (configuration changes)
1071 Added "AC_C_CROSS" to configure files, so configuration should work
1072 properly on Solaris 2.4.
1075 Changed option configuration to work synchronously, and added
1076 "itk_initialize" command to initialize the configuration options
1077 for each mega-widget class. The original behavior of handling
1078 option changes via "do-when-idle" has been removed.
1081 Changed all structure members called "namespace" to "namesp".
1082 This allows the code to compile correctly under C++.
1084 9/13/95 (configuration changes)
1085 - added support for "i[34]86:BSD/OS" in "config/config.guess"
1086 - fixed "test" target for iwidgets
1089 Fixed "global" command and other places where namespace paths
1090 are parsed to allow for a single ":" in command/variable names.
1093 Fixed a problem which caused class-based options to be lost when
1094 a widget class was defined within a proc.
1097 Fixed class access command so that when it is deleted, it
1098 automatically destroys the class. This also fixed a seg fault
1099 that occurred when an object's access command stomped on the
1100 class access command.
1102 9/14/95 (enhancement)
1103 Fixed "scope" command and the @scope facility so that null strings
1104 can be passed around without all of the extra scoping info.
1106 ==========================================================================
1107 ----------------------- RELEASE 2.0b2 - 9/14/95 ------------------------
1108 ==========================================================================
1110 9/15/95 (enhancement)
1111 Changed error messages reported when a class method/proc gets the
1112 wrong number of arguments to report the usage information, like:
1113 {wrong # args: should be "obj foo x y ?arg arg...?"}
1116 Fixed a seg fault that occurred when the "cget" method was called
1120 Fixed a bug that caused private variables in a base class to be
1121 uninitialized, even if an initial value was specified in the
1124 9/22/95 (configuration changes)
1125 Added the "SHELL=/bin/sh" statement to the main makefile. This
1126 fixes build problems on SGI machines.
1128 10/9/95 (paradigm shift)
1129 Removed the implicit scoping from any facility that takes a command
1130 or variable name. Implicit scoping made it difficult to pass a
1131 command string or variable name into a wrapper proc and yet preserve
1132 the scope that it came from. All scoping is now explicit. All
1133 commands and variables are interpreted in the global "::" scope
1134 unless they are wrapped in an "@scope" declaration. Commands can
1135 be wrapped up like this:
1137 button .b -text "Push Me" -command [code .b configure -bg red]
1139 Variable names can be wrapped up like this:
1141 radiobutton .rb1 -text "Choice #1" -variable [scope mode] -value 1
1143 The "code" and "scope" commands wrap up strings with an "@scope"
1144 specification which preserves the namespace context.
1146 10/17/95 (paradigm shift)
1147 Changed the "%C" option of the "bind" command to return a scoped
1148 command of the form "@scope namespace widget" that can be used to
1149 access the widget. "%C" should be used instead of the usual "%W"
1150 window name when attempting to access the widget. Bindings should
1151 be written like this:
1153 bind Entry <FocusIn> {%C configure -bg white}
1154 bind Entry <FocusOut> {%C configure -bg gray}
1156 The command "%C" can be used to access the widget regardless which
1157 namespace it belongs to.
1159 10/31/95 (enhancement)
1160 Fixed "unknown" command to support a general facility for adding
1161 unknown command handlers. The "unknown_handler" proc is used to
1162 register new handlers. Each time an unknown command is encountered,
1163 each of the handlers is invoked to attempt to handle the command.
1164 If a handler returns "-code continue", control passes to the next
1165 handler on the list. Handlers are invoked in the order opposite to
1166 the way they were registered. Extensions can use this facility to
1167 add their own handlers into the "unknown" scheme.
1169 11/7/95 (enhancement)
1170 Added a "backward-compatibility" mode to [incr Tcl]. By default,
1171 widget names can now be used as access commands in any namespace,
1172 even if the widget access command exists in another namespace.
1173 This emulates the normal Tk behavior that widgets are global resources
1174 in the application that can be accessed anywhere. This behavior can
1175 be disabled by setting the global variable "itcl_purist" to "1". When
1176 this variable is set non-zero, care must be used to use "%C" or
1177 "[winfo command %W]" as an access command when the widget is used
1178 outside of the namespace that contains it. From the standpoint of
1179 the object-oriented paradigm, the "purist" mode is better since it
1180 supports encapsulation. The "backward-compatible" mode, however,
1181 allows [incr Tcl] to work better with existing Tk applications and
1184 11/22/95 (bug fix and enhancement)
1185 Fixed the built-in "info" command for classes to include the "info
1186 classes" and "info objects" queries. These were initially overlooked
1187 in a hard-wired list of "info" queries.
1189 Fixed the ensemble facility in general to support unknown options
1190 via an "@error" handler. Any option registered with the name "@error"
1191 is treated as an error handler for the ensemble. Arguments passed
1192 to the option include the ensemble name, the unknown option, and all
1193 remaining arguments. For the built-in "info" command, the "@error"
1194 handler passes any unknown options to the usual Tcl "info" command,
1195 so all of the standard options are automatically available.
1198 Fixed usual tkerror dialog to truncate error messages at 5 lines.
1199 The usage information returned by an ensemble or itcl object can
1200 be much longer, causing the "Stack Trace" button to get lost in
1204 Removed the constructor/destructor from the list of public methods
1205 returned as usage information when an unknown method is encountered
1209 Fixed error reporting for object construction. Used to say
1210 something like "object constructor x y z" which made it look
1211 like a method invocation. Now says "class object x y z" which
1212 looks more like the call that the user made to trigger the error.
1215 Fixed class creation and object creation to avoid clobbering
1216 existing commands with new class/object access commands. This
1217 prevents all hell from breaking loose when a command like
1218 "class set {...}" is invoked.
1220 12/6/95 (configuration changes)
1221 Fixed parsing of namespace paths to use local storage instead of
1222 assuming that strings are writable. This means that the
1223 "-fwritable-strings" option is no longer necessary for GCC and
1224 other compilers that store static strings in the program text
1225 segment. This option has been removed from all "configure.in"
1226 files. Linux users will no longer see core dumps on start-up.
1229 Fixed "upvar" so that class data members can be accessed from
1230 another calling procedure. This fixed a problem with using
1231 "parray" from within class methods.
1234 Fixed "@scope" variable references so that variables can be created
1235 using "@scope" in any context and referenced later.
1237 12/9/95 (feature change)
1238 Removed "-hidden" option from namespaces. It seemed to complicated
1239 and quirky to explain on the man page. Instead, all parser
1240 namespaces like "scope-parser" and "mkindex-parser" are grouped
1241 into a "::tcl" namespace. This keeps them somewhat hidden even
1242 without any special treatment.
1244 12/9/95 (minor enhancement)
1245 Added "array" command to class definition parser, so it can be
1246 used along with "set" to initialize common arrays.
1248 12/10/95 (paradigm shift)
1249 Removed the "%C" pattern from the expansions recognized by the
1250 "bind" command, in favor of the following scheme:
1251 %W ........ name of widget receiving event
1252 %M ........ name of mega-widget containing widget receiving event
1253 %q ........ fully-qualified command name of widget receiving event
1254 %Q ........ fully-qualified command name of mega-widget receiving event
1255 Fixed "winfo command" to return the fully-qualified command name of
1256 a widget (instead of a scoped access command) to be consistent with
1257 the "%q" bind pattern.
1260 Fixed Tk library code to use "%q" and "winfo command", so that the
1261 default widget behaviors will work even in "itcl_purist" mode.
1263 12/11/95 (minor enhancement)
1264 Added "winfo megawidget" query, which will return the name of the
1265 mega-widget containing a specified component widget. In order for
1266 this to work, a mega-widget package must use the procedure
1267 Itcl_SetMegaWidget() to register each component as it is added
1271 Fixed Archetype base class to keep all options sorted in alphabetical
1272 order. This way they can be reported back by the "configure" method
1273 in alphabetical order. Options are now initialized by "itk_initialize"
1274 in alphabetical order as well.
1277 Fixed the Archetype base class to register each component widget with
1278 Tk via Itk_SetMegaWidget(). This means that "winfo megawidget" and
1279 "%Q" can be used to reference the containing mega-widget for any component.
1282 Fixed the "configure" method in the Archetype base class so that when
1283 an error is encountered while setting a configuration option, the option
1284 is set back to its previous value.
1287 Fixed the "itk_component add" method to find access commands for
1288 components even if they are created in the global scope. Components
1289 that are meant to be shared can be created using "uplevel #0". The
1290 access command for this component will be installed in the global scope,
1291 and therefore available to all other namespaces.
1293 Syntactic sugar like a "-global" option would be nice, but references
1294 like $itk_component(...) must be substituted in the calling scope, and
1295 it is not possible to get these properly substituted and still maintain
1296 the boundaries around arguments.
1299 Fixed Archetype base class to handle public/protected/private components
1300 properly. The usual public/protected/private commands can be used in
1301 conjunction with "itk_component add" to set the protection level of a
1302 component. The protection level affects the action of the "component"
1303 method. Public components are reported in any namespace, and are
1304 accessible from any namespace. Protected components are accessible
1305 within a base class and derived classes. Private components are
1306 accessible only within the class where they are defined. This feature
1307 can be used to keep unimportant components (such as frames) off of the
1308 component list that a client would see.
1310 12/13/95 (enhancement)
1311 Added "usual" and "ignore" commands for processing component widget
1312 configuration options. The "usual" command finds the usual code fragment
1313 for the widget class of the component, and executes it. The command
1314 "itk::usual" can be used to register option code for new widget classes.
1316 The "ignore" command can be used to override previous "keep" and "rename"
1317 commands. This is useful for removing options that the "usual" code
1320 Fixed the "itk_component add" command so that if the option handling code
1321 is not specified, the "usual" command is invoked automatically.
1324 Fixed the Archetype base class to handle the immutable Tk options
1325 properly. Options like -class, -colormap, -screen and -visual can only
1326 be set at creation time. The itk_option array is now properly
1327 initialized to report their creation value.
1330 Fixed "itk_option add" command to report errors properly for unknown
1334 Fixed "body" command to report errors properly for unknown functions.
1337 Fixed a bug in the handling of TCL_GLOBAL_ONLY flag when looking up
1338 class variables. Previously, this was ignored, so object-specific
1339 variables could be accessed in a "global" context by Tk widgets.
1340 This caused some strange behavior when object-specific variables
1341 were used in conjunction with widget options like "-textvariable".
1342 Tk widgets now properly interact with classes via global variables.
1345 Fixed "auto_mkindex" to recognize procs within class definitions and
1346 add them to the "tclIndex" file.
1349 Fixed "body" command to find functions only in the specified class.
1350 The bug caused a base class method to be redefined whenever a "body"
1351 command was issued for a derived class if the method was not declared
1352 in the derived class. Made a corresponding fix to the "configbody"
1353 command for public variables.
1355 12/15/95 (enhancement)
1356 Added the following commands to the class definition parser: bind,
1357 scope and code. This allows generic class bindings to be included
1358 in the body of a class definition.
1360 12/15/95 (enhancement)
1361 Added "-clientdata" option in itk::Archetype base class so that
1362 all widgets will have an extra field for client data. For application
1363 developers, this may come in handy.
1366 Fixed the itk::Archetype base class so that if "itk_option add" or
1367 "itk_option remove" is called for ordinary class-based options before
1368 "itk_initialize" (which normally integrates them in) it does not cause
1372 Fixed namespace resolution so that a command/variable with a
1373 specific path like "itk::body" will not be found in another
1374 imported namespace. For the import list to be followed, the
1375 command name must be generic like "body".
1377 12/19/95 (configuration changes)
1378 Changed from generic directories like "tcl" and "tk" to directory
1379 names with version numbers like "tcl7.4" and "tk4.0".
1382 Changed names like "itcl_library" and "itcl_purist" to "itcl::library"
1383 and "itcl::purist". This makes more sense in the documentation, since
1384 the underbar stuff is no longer needed with namespaces, and extension
1385 writers are discouraged from using it.
1388 Changed handling of argument lists for functions with Tcl or C
1389 implementations. All argument lists are now treated as Tcl
1390 argument specifications. For Tcl implementations, this determines
1391 what arguments are available in the body of the procedure; for C
1392 implementations, this merely gives the intended usage information
1393 for the function (the C implementation may choose to ignore this
1394 and do something else). This fix makes it easier to override
1395 C implementations with Tcl procedure bodies.
1398 Split the usual TCL_GLOBAL_ONLY flag into two meanings: TCL_GLOBAL_ONLY
1399 now means "a global variable in the global namespace", and ITCL_GLOBAL_VAR
1400 means "a global variable in the current namespace". This enhancement
1401 fixes Tk (and many other extensions) which request global variables.
1402 A plain variable name together with TCL_GLOBAL_ONLY is now interpreted
1403 as an ordinary Tcl global variable, so the behavior is backward-compatible.
1404 A scoped variable reference will work properly with namespaces. If
1405 extension writers get more ambitious, they can start using the
1406 ITCL_GLOBAL_VAR flag, which will make their extensions namespace-friendly.
1409 Fixed "@scope" command so that extra arguments added at the end are
1410 kept as proper list elements when added to the command string. This
1411 makes sure that boundaries around Tcl words are not lost when the
1412 scoped command is interpreted.
1414 12/28/95 (minor enhancement)
1415 Added "config" method to the Archetype base class as an alias for
1416 the usual "configure" method. Many Tk applications use "config"
1417 as an abbreviation for "configure", so this fix improves compatibility
1418 with other packages.
1421 Fixed Itcl_SaveInterpState() and Itcl_RestoreInterpState() to
1422 properly save/restore the interp state even for commands like
1423 Tcl_SetCmd(), which are sloppy about setting the interpreter
1424 result. This fixed bad memory references that were encountered
1425 in enforced namespaces.
1428 Fixed Itcl_DeleteNamesp() to allow variable traces to be fired
1429 off properly when a namespace is destroyed.
1432 Fixed the Archetype base class to do the "ignore" operation
1433 properly for mega-widget options. A bug was causing a single
1434 "ignore" request not only to eliminate the desired option, but
1435 to eliminate options that were renamed to the "ignore" name
1438 ==========================================================================
1439 ------------------------ RELEASE 2.0 - 12/31/95 ------------------------
1440 ==========================================================================
1443 Fixed some compiler warnings reported by Christopher Hylands
1444 (cxh@EECS.Berkeley.EDU)
1447 Fixed the description of the last test in itk/tests/option.test.
1450 Fixed code examples in man pages. Lines starting with "." now
1451 start with the null character "\&", to avoid errors with troff.
1454 Fixed a bug in tkMenuUnpost. Popup menus associated with something
1455 other than a menubutton can now be unposted properly.
1458 If an error occurs during construction, all destructors are now
1459 invoked--even if an error is encountered. All destructor errors
1460 are completely ignored. This fixed a core dump reported by
1461 Christopher Hylands (cxh@EECS.Berkeley.EDU).
1464 Fixed memory leaks reported by Forest Rouse (rouse@flash.icemcfd.com).
1465 Also fixed a problem in Itcl_DeleteNamesp() with the way that
1466 the variable cache was destroyed. This caused a core dump on Solaris
1467 systems when a namespace was deleted.
1470 Fixed itk tests to ignore any resources that the user might have
1471 on the desktop (e.g., *background: red)
1474 Fixed auto_mkindex so that the "proc" command accepts arglist and
1475 body as optional arguments. Within class definitions, these
1476 parameters may not be specified. Also, fixed the "source" command
1477 so that it is ignored within the file being indexed. Otherwise,
1478 it brought in program elements that confused the index.
1481 Fixed the unknown command to save errorInfo and restore it before
1482 invoking each handler. This fixed an irritating bug that caused
1483 the first error message to be lost as "tkerror" was autoloaded.
1486 Fixed a bug in variable lookup that allowed private/protected
1487 variables to be set from outside the normal context. On initial
1488 lookup variables were being passed over, but since they did not
1489 appear to exist, they were being created. Variables are now
1490 protected from being set or redeclared from an improper context.
1492 3/1/96 (enhancement)
1493 Changed namespaces to import from their parent in "protected"
1494 mode instead of "public" mode. This is a better default, since
1495 it emphasizes the strong relationship between a parent and a
1496 child. They can share variables that are hidden from anyone else.
1499 Fixed the "info objects" to autoload any classes referenced by
1500 "-isa" or "-class" that are not yet defined.
1502 3/12/96 (enhancement)
1503 Fixed class parser to recognize commands at the global scope.
1504 This makes it possible to embed normal Tcl commands like an
1505 "if" statement within a class definition. It also makes it
1506 easy to extend the class parser by defining procs in the
1507 ::itcl::parser namespace.
1509 3/17/96 (enhancement)
1510 Fixed "usual" command so that with no arguments, it returns a
1511 list of all known tags. Each tag name can be used to query its
1514 3/19/96 (enhancement)
1515 Fixed the "configure" method for mega-widgets to include public
1516 variables as configuration options. Normally, mega-widget
1517 classes use "itk_option define" to define configuration options.
1518 However, if a mega-widget includes an ordinary itcl class as
1519 a base class, it should provide access to the base class options.
1520 Public variables are now integrated into the composite option
1521 list by "itk_initialize".
1523 4/2/96 (enhancement)
1524 Added a "chain" command to the built-ins available in each class.
1525 A command like "chain 1 2 3" invokes the next implementation of
1526 the current method/proc found looking up the inheritance hierarchy
1527 toward base classes. This can be used to invoke a base class method
1528 in a generic way, without hard-coding the base class name.
1531 Fixed "configure" operation for mega-widgets. Previously, if an
1532 error was encountered during configuration, the value in itk_option
1533 was set back to the previous value, but some parts of the mega-widget
1534 might be left in a partially configured state. Now, if an error is
1535 encountered and the option is set back to its previous value, the
1536 change is propagated down to all parts, so the widget remains in a
1540 Fixed a bug reported by Karel Zuiderveld (karel.zuiderveld@cv.ruu.nl)
1541 related to virtual method selection in "itcl_methods.c". If for some
1542 reason a method name was not found in the virtual table, the table
1543 access caused a core dump. This is now fixed.
1546 Fixed "itk_initialize" to recognize errors when executing the "config"
1547 code associated with configuration options. Any error immediately
1548 causes itk_initialize to abort, which usually aborts construction.
1551 Fixed a bug in Itcl_SaveInterpState() and Itcl_RestoreInterpState()
1552 which caused error information to get lost during object construction
1553 when errors were encountered. The new iPtr->appendResult buffer was
1554 being ignored, and results in this buffer were getting lost.
1557 Changed the internal Interp and TkWindow data structures so that all
1558 of the extra [incr Tcl] data members are at the bottom of the structure.
1559 This should prevent errors when modules that have been compiled against
1560 vanilla Tcl/Tk are dynamically loaded into [incr Tcl].
1562 6/12/96 (enhancement)
1563 Integrated changes for "itcl2.0+3" release by Karel Zuiderveld,
1564 Jan Nijtmans and Vince Darley. This added support for tcl7.5/tk4.1,
1565 dynamic loading, canvas improvements, and support for Macintosh
1566 environments. Many thanks to these guys for all of their hard
1569 6/22/96 (installation)
1570 Changed the way things are installed:
1571 - the startup file "init.itcl" is now called "itcl.tcl"
1572 - the startup file "init.itk" is now called "itk.tcl"
1573 - libraries, include files and man pages are now installed under
1574 a special "itcl" directory to avoid conflicts with a vanilla
1575 Tcl/Tk installation. For example, if your --prefix is set
1576 to /usr/local, things would be installed as follows:
1578 /usr/local/bin ............ executables:
1579 ish = tclsh with namespaces
1580 iwish = wish with namespaces
1581 itclwish = tclsh with namespaces and classes
1582 itkwish = wish with namespaces and classes
1584 /usr/local/include/itcl ... include files
1585 /usr/local/lib/itcl ....... libraries
1586 /usr/local/man/itcl ....... manual pages
1589 Fixed "itkwish" so that it requires the Iwidgets package automatically
1590 during initialization. For all other shells, you must specifically
1591 request Iwidgets with a statement like "package require Iwidgets"
1594 Fixed Tk_CanvasTagsParseProc to avoid dumping core when an item
1595 is configured with a null tag string.
1598 Fixed PolygonToPoint() in tkCanvPoly.c so that invisible polygons
1599 (with no outline and no fill) are still considered when picking
1600 the closest item. Without this fix, programs like the "floor plan"
1601 in the Tk widget demo will not work.
1604 Fixed the [incr Widgets] "feedback" widget to do a full update on
1605 each step. Without this, changes appear from time to time, but
1606 the bar does not grow smoothly.
1609 Fixed fileselectiondialog and fileselectionbox to update directory
1610 list properly when "-directory" option is configured.
1613 Fixed "itk_option define" to properly preserve a "config" code
1614 body so that it can be released if it is redefined later.
1616 ==========================================================================
1617 ------------------------ RELEASE 2.1 - 6/28/96 -------------------------
1618 ==========================================================================
1621 Fixed C-level variable access so flags like ITCL_FIND_LOCAL_ONLY
1622 can be passed into Tcl_GetVar() and Tcl_SetVar().
1625 Fixed the "notebook" widget in the [incr Widgets] set. The "index"
1626 method now supports pattern matching and index names with spaces in
1630 Fixed destructor invocation so that if an object is being
1631 destructed and you try to delete it again, it will report an
1635 Fixed the "inherit" command to make sure all names are really
1636 valid classes. Previously, trying to inherit from a proc would
1639 8/29/96 (enhancement)
1640 Integrated with itcl2.1+2 (tcl7.5p1/tk4.1p1).
1643 Fixed the Itcl_RegisterC() procedure so that the same name can be
1644 registered more than once, as long as it has the same function
1648 Fixed a bug in method access for protected methods. There was a
1649 problem when a base class defined a method, and a derived class
1650 overloaded the method, and the method was accessed from the base
1651 class namespace. Added function Itcl_CanAccessMethod() to check
1652 for overloaded methods and allow access accordingly.
1655 Fixed the Itcl_RestoreInterpState() procedure so that the "errorCode"
1656 variable is restored properly. There was a problem when the
1657 error code contained a list of elements.
1660 Fixed a bug in the way namespaces were deleted. The hash table of
1661 child namespaces was being traversed while elements within it were
1662 being deleted. This caused a core dump when you tried to exit
1663 the application with a command like "destroy .".
1666 Fixed the way that errors are reported when a base class is constructed
1667 with the wrong arguments. Previously, the error message showed the
1668 object creation command like "wrong # args: should be Foo name val1 val2".
1669 Now, it shows the base class constructor name, so it is more obvious
1670 where the error is coming from.
1673 Fixed a bug in constructor invocations. All base class constructors
1674 are now invoked properly, even if a derived class does not have a
1677 10/9/96 (enhancement)
1678 Added proper support for safe interpreters. You can now use namespace
1679 commands in a safe interpreter, and you can load Itcl as a safe package.
1682 Fixed a core dump with "namespace foo {info locals}". The namespace
1683 call frame was not being set up properly, so the local variable table
1684 was garbage. Normally, you don't access local variables at the
1685 namespace level. But now it is fixed.
1688 Fixed the Itcl_RegisterC() procedure so that each interpreter has
1689 its own list of symbolic function names. This avoids global data
1690 and makes more sense for people using multiple interpreters.
1693 Fixed variable lookup so that when you try to access a variable
1694 like "::foo::x" inside of a procedure, you get an error instead
1695 of a local variable named "::foo::x". Variables like this need
1696 to be declared global.
1698 10/22/96 (enhancement)
1699 Fixed the built-in "isa" method to autoload class definitions as
1700 needed for each "isa" test. If a class is not defined and cannot
1701 be autoloaded, it is an error.
1703 10/26/96 (enhancement)
1704 Fixed "delete object" command so that objects can be deleted
1705 using scoped values for the object name.
1707 10/29/96 (enhancement)
1708 Integrated with itcl2.1+5 (tcl7.6/tk4.2).
1711 Removed "plus" and "dash" patches to allow for porting to Windows95
1712 and Macintosh platforms. Simplified configuration and makefiles
1715 11/4/96 (installation)
1716 Fixed configuration and makefiles to support building in a
1717 separate directory. There is a bug in "autoconf" which prevents
1718 this from going smoothly. You have to copy all of the configure
1719 scripts to a separate tree (e.g., using a tar file), and then build.
1722 Fixed a bug in the way variables were reported by the built-in
1723 "info" command for classes and objects. Private variables in
1724 a base class were incorrectly reported as "<undefined>". They
1725 are now reported properly.
1728 Fixed the "this" variable so that if an object is deleted while it
1729 is still in use, its name is properly reported as the null string.
1732 Fixed the way namespaces are deleted so that the "::errorInfo" and
1733 "::errorCode" variables remain intact until everything else has been
1734 destroyed. These variables are needed if any errors are encountered
1735 as an interpreter is being destroyed.
1737 11/11/96 (installation)
1738 Split the "itclConfig.sh" file into separate "itclConfig.sh" and
1739 "itkConfig.sh" files.
1741 11/11/96 (installation)
1742 Fixed the package installation to conform to tcl7.6/tk4.2. The
1743 pkgIndex.tcl files are now stored in the library directory for
1746 11/13/96 (enhancement)
1747 Overhauled the scrolledcanvas widget. It is now about an order of
1750 11/14/96 (enhancement)
1751 Overhauled the [incr Widgets] "catalog" demo. When you pick any
1752 mega-widget class, the demo displays an example widget, the code
1753 used to build it, the class hierarchy, and the man page.
1756 Fixed the way the "inherit" command autoloads class definitions.
1757 Previously, it invoked the class name as a command. Now, it uses
1758 the "auto_load" command.
1760 11/23/96 (installation)
1761 Fixed the "configure" files to use "mkinstalldirs" instead of "mkdir"
1762 so that the entire distribution can be built in a separate directory
1763 starting with a single "configure" file. Fixed the way the distribution
1764 is created to make this patch for each new distribution.
1766 11/23/96 (installation)
1767 Fixed the iwidgets installation so that the installed files (instead
1768 of the source files) are chmod'd to have the proper permissions.
1770 11/29/96 (installation)
1771 Fixed iwidgets (combobox, optionmenu, shell) so that they don't rely
1772 on "tkwait visibility" before doing a grab. On the Macintosh, this
1773 only works the first time a window is mapped. After that, this
1774 command does not return control, even when a window is remapped.
1777 Fixed "tk4.2/library/menu.tcl", moving a comment in a switch statement
1778 above the default case into the default case. When the comment is
1779 above the case, it is treated as a list element and a parsing error
1780 occurs. You can trigger the error with a command like "tkMenuFind . x".
1781 When the comment is inside the case, everything works fine.
1784 Fixed a memory error that occured when an interpreter was destroyed.
1785 One namespace (e.g., base class) caused another (e.g., derived class)
1786 to be destroyed. Then the namespace was destroyed again later on.
1787 Now, as we iteration through the safeCopy list, we check to make
1788 sure the namespace still exists.
1791 Fixed entryfield mega-widget to avoid using the "%s" state field
1792 for key presses. It was using it to find out whether or not Control,
1793 Shift, or Alt keys were being held down during a key press. But this
1794 field confuses Alt with NumLock when you go between Unix and Windows
1795 platforms. The entryfield appeared to be broken when NumLock was
1796 turned on. Nothing is lost if we simply ignore it and let all
1799 12/1/96 (installation)
1800 Fixed the way that "pkgIndex.tcl" files are built for Itcl/Itk.
1801 When you build with "--enable-shared", the package files load the
1802 shared library, but when you build without, the package files
1803 use {load "" Itcl} to get the static package. This lets you
1804 do "package require" commands in slave interpreters, even if
1805 things were built with static packages.
1808 Fixed how namespaces are deleted when an interpreter is deleted.
1809 Previously, namespaces were deleted after the assocData for the
1810 interp. If any background errors occurred while the namespace
1811 was being deleted, they caused seg faults later on. Now, the
1812 global namespace is cleared (but not deleted) *before* deleting
1813 the assocData. Any background errors are deleted, and the global
1814 namespace is finally deleted at that point.
1816 12/2/96 (enhancement) JCI
1817 Defined "tkOpenDocument" in tk.tcl so that Macintosh users can
1818 double-click on an [incr Tcl] source file, and itkwish will be
1819 invoked to execute it.
1822 Fixed the entryfield widget so that characters like: " [ ] { } \ &
1823 are substituted properly into the "%c" field when doing character
1826 12/2/96 (enhancement) **POTENTIAL INCOMPATIBILITY**
1827 Changed the HTML parsing in the scrolledhtml widget to speed it up.
1828 Also, changed the "-feedback" option so that it appends two numbers
1829 on the end of the feedback command: the current position and the
1830 maximum position. This frees the caller from having to figure out
1831 the maximum position.
1833 12/2/96 (enhancement)
1834 Added "-borderwidth", "-relief" and "-elementborderwidth" options
1835 to the feedback widget, so you can control its appearance a little
1838 ==========================================================================
1839 ------------------------ RELEASE 2.2 - 12/3/96 -------------------------
1840 ==========================================================================
1842 12/12/96 (installation)
1843 Fixed "iwidgets.tcl" initialization file to rely on the environment
1844 variable IWIDGETS_LIBRARY (if it exists), and use the compiled-in
1845 path as a last resort. That way, the user can override the iwidgets
1846 library with an environment variable setting.
1848 12/12/96 (installation)
1849 Fixed the "catalog" demo for [incr Widgets] to help support Windows3.1.
1850 The code is now arranged to make it easy to translate between the
1851 real demo names and DOS 8.3 file names.
1854 Added a "usual" test for all of the [incr Widgets]. This checks to
1855 make sure that there is a bit of "usual" code for each widget, that
1856 the options in the "usual" code are valid, and that all of the
1857 widgets mix together without errors.
1859 4/11/97 (enhancement)
1860 Merged in patches for tcl7.6p2/tk4.2p2 (jingham)
1863 Fixed itk::Toplevel to have the hull keep the -takefocus option.
1864 This fixed a problem with the tab ring in iwidget dialogs.
1866 6/1/98 (complete rewrite)
1867 Rewrote the entire package to work with Tcl8.0 namespaces and the
1868 new byte code compiler.
1870 ==========================================================================
1871 ----------------------- RELEASE 3.0a1 - 6/16/98 ------------------------
1872 ==========================================================================
1875 Removed references to Tcl internal macros such as TclDecrRefCount.
1876 This was causing problems under Windows, since those macros use
1877 global variables that are not available outside of tcl80.dll.
1880 Added my own definition of the assert macro. Since Tcl/Tk doesn't
1881 use assert, the default version was causing build problems with
1884 7/27/98 (configuration change)
1885 Changed all "configure" scripts to rely on tclConfig.sh and tkConfig.sh
1886 for compile options.
1888 7/27/98 (configuration change)
1889 Changed the initialization process for Itcl/Itk. Both packages now
1890 key off of tcl_library to find their initialization scripts.
1892 7/27/98 (configuration change)
1893 Removed IWIDGETS_LIBRARY environment variable from the Iwidgets
1894 package. If Iwidgets is installed properly, this variable is not
1897 7/29/98 (configuration change)
1898 Added Scott Stanton's patch to the initialization process. The
1899 last-ditch installation directory is no longer compiled into the
1900 itcl sources. Instead, itcl searches for the installation directory
1901 starting from $tcl_library. Also, if the variable itcl::library is
1902 set before loading itcl, then itcl aborts the search and uses that
1903 as its library directory.
1906 Added Jim Ingham's patches for the Mac.
1908 7/30/98 (configuration)
1909 Fixed Makefiles for Iwidgets 2.2/3.0 to avoid a problem while
1910 installing the demo images/html. The INSTALL_DATA program may
1911 have a relative name (../../config/install-sh) so we must be
1912 careful to "cd" into library, demos, etc., but not into other
1913 directories below them.
1916 Fixed "namespace import" to work with autoloading. If you
1917 execute "namespace import iwidgets::*", the auto_import proc
1918 will create stubs for all of the iwidgets commands. Executing
1919 one of the stubs triggers autoloading for the appropriate command.
1922 Integrated changes from Scriptics team to work seamlessly with
1926 Fixed the iwidgets::optionmenu to work properly under Windows 95/NT.
1927 Extended the "get" method in iwidgets3.0 so that you can query
1928 existing elements from an optionmenu.
1930 ==========================================================================
1931 ------------------------ RELEASE 3.0 - 8/11/98 -------------------------
1932 ==========================================================================
1935 Fixed the windows pkgIndex.tcl files for Itcl and Itk to properly
1936 load their .dll. Also fixed iwidgets/catalog to package require
1937 Itcl, Itk, and to import ::itcl::* to get "class" defined. (BW)
1940 Fixed tests for auto_mkindex to work properly outside of itkwish.
1941 Tests now include "namespace import itcl::*" instead of assuming that
1942 this behavior is built into the wish.
1944 4/18/00 (feature enhancement)
1945 Fixed itcl::find to find classes and objects in *all* namespaces
1946 in the interpreter. Until this fix, the itcl::find command would
1947 report only the objects in the active namespace or the global
1948 namespace. Being able to find classes/objects in all namespaces
1949 makes debugging easier. Thanks to Chad Smith for pushing to make
1953 Fixed Itcl_ClassVarResolver so that the formal parameters in a
1954 method/proc take precedence over class data members.
1957 Fixed all itcl/itk/iwidgets3.0.0 tests to run cleanly with the new
1961 Fixed "itk_component delete" so that the composite option list is
1962 cleaned up whenever a component is deleted. For example, suppose
1963 a component is the sole contributor of -font. When that component
1964 is removed via "itk_component delete", the -font option goes away
1965 as well. Also fixed the handling of the itk-delete-* binding for
1966 the component. When the component is removed, the binding tag
1967 is also removed by itk::remove_destroy_hook.
1970 Fixed the check done during object creation to avoid clobbering
1971 existing commands. Previously, itcl would look for any command--
1972 in the local *and* global namespace--that might be clobbered.
1973 Now, it looks for commands only in the local namespace, since
1974 those are the only ones that could truly be clobbered.
1977 Removed obsolete Makefile/configure files in the various "unix"
1978 directories. Makefiles and configure files now reside one level
1979 above, in the standard TEA place.
1981 7/11/00 (stubs cleanup) <welch@ajubasolutions.com>
1982 Fix the build so static links do not use the stubs library.
1984 8/1/00 (stubs cleanup) <davygrvy@ajubasolutions.com>
1985 Added missing declarations for Itcl_InitStubs and Itk_InitStubs
1986 and simplified how Itcl Stubs are set in Initialize() of itk_cmds.c
1988 8/1/00 (Makefile) <welch@ajubasolutions.com>
1989 Added config/installFiles.tcl and changed the various Makefile.in
1990 files to use this instead of install-sh. installFiles.tcl can
1991 optimize out a copy if the target file is already up-to-date.
1992 This eliminates conflicts from parallel builds on different platforms
1993 where one build is zipping up the installed files while another platform
1994 is copying platform-independent files (i.e., the iwidgets demos).
1996 8/4/00 (stubs cleanup) <davygrvy@ajubasolutions.com>
1997 Fixed dll linkage problem with the prototypes of the 2 XX_InitStubs
1998 functions use. I copied the core too literally. Stubs libraries are
1999 always static, so there's no need to play games with __declspec on
2002 8/7/00 (stubs cleanup) <welch@ajubasolutions.com>
2003 Cleaned up use of Itcl_InitStubs by Itk. Finally got it right after
2004 much flailing about. itcl.h has the correct definitions, and
2005 itclStubLib.c has the correct #ifdefs.
2006 Also nuked extra definitions of itclStubsPtr from the itk_cmds.c file.
2008 8/17/00 (more stubs cleanup) <davygrvy@ajubasolutions.com>
2009 Tcl_InitStubs in itcl/generic/itcl_cmds.c was using the TCL_VERSION macro
2010 set by the tcl.h header. Changed it to be "8.1" instead as it doesn't
2011 matter unless Itcl needs special/new features of the core it's header is
2012 from. But it doesn't.. so hard code it for an 8.1 minimum to make the
2013 Itcl library have a better version range with the core as specific
2014 version tracking with the core isn't needed (at this time).
2016 ==========================================================================
2017 ------------------------ RELEASE 3.2 - 08/18/00 ------------------------
2018 ==========================================================================
2020 9/22/00 (stubs cleanup) <davygrvy@ajubasolutions.com>
2021 Itcl_InitStub prototype in itcl/generic/itcl.h was getting name mangled
2022 by c++ compilers. Fixed with an 'extern "C"' appropriately applied.
2024 4/07/01 (bug fix) <davygrvy@pobox.com>
2025 Tcl's internal header, tclInt.h, in 8.4a2 got a small change in the Command
2026 structure that needed 2 changes in Itcl to resolve. 1) #if/#else/#endif blocks
2027 added in itcl_class.c and itc_ensemble.c allowing Itcl to compile. 2) added
2028 a global variable called itclCompatFlags that's sets a flag in Itcl_Init()
2029 that will modify the logic around access to cmdPtr->flags/deleted. This
2030 way, any core compile will yield a fully forward/backward compatible
2031 binary (correct logic set at runtime).
2033 5/22/01 (bug fixes) <davygrvy@pobox.com>
2034 makefile.vc lives again! Brought back from it's death to conquere windows
2035 once again for users who prefer to avoid (or can't understand or get the tools
2036 installed for) the TEA build system.
2038 Also, numerous fixes relating to Kevin Kenny's Tcl API mods for better CONST
2039 support. The latest headers for Tcl where throwing warnings all over the place
2040 about type errors. I fixed the sources, but haven't checked against older