Updated the incr Tcl support to cope with itcl 3.2 r5_1_6p6
authorPat Thoyts <patthoyts@users.sourceforge.net>
Thu, 14 Mar 2002 23:40:29 +0000 (23:40 +0000)
committerPat Thoyts <patthoyts@users.sourceforge.net>
Thu, 14 Mar 2002 23:40:29 +0000 (23:40 +0000)
Added help file for the classes window.
Fixed font error in the command window.
Fixed the About help dialog.
Hitched the version patchlevel.

ChangeLog
Classes.html [new file with mode: 0644]
WhatsNew.html
about.tcl
classes_list.tcl
cmdline.tcl
help.tcl
objects_list.tcl
tkinspect.tcl
version.tcl

index bd3650f1e9c5cfb83e2cb0bcc754696430db85c8..29ab3aaad5fe3821b16e32a3dd5995f027f6623d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,17 @@
-Fri Mar  1 23:37:21 2002  Pat Thoyts <Pat.Thoyts@bigfoot.com>
+Thu Mar 14 12:09:24 2002  Pat Thoyts <patthoyts@users.sourceforge.net>
+       
+       * classes_list.tcl: Updated to support itcl 3.2 info syntax
+       * objects_list.tcl: Updated to support itcl 3.2 info syntax
+       * Classes.html: new page to describe the classes list window.
+       * tkinspect.tcl: fixed the About help menu item.
+       * version.tcl: incremented version to p6.
+
+Fri Mar  2 00:13:08 2002  Pat Thoyts <patthoyts@users.sourceforge.net>
+       
+       * tkinspect: applied T. Schotanus incr Tcl support patch. This
+       provides itcl support for older (pre 3.x?) itcl versions.
+
+Fri Mar  1 23:37:21 2002  Pat Thoyts <patthoyts@users.sourceforge.net>
        
        * tkinspect: applied John LoVerso's 1996 comm patch to support
        systems without the Tk send command.
diff --git a/Classes.html b/Classes.html
new file mode 100644 (file)
index 0000000..d9c61c8
--- /dev/null
@@ -0,0 +1,26 @@
+<!doctype HTML public "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+  <head>
+    <title>Classes List</title>
+    <!-- $Id$ -->
+  </head>
+  
+  <body>
+    <h1><center>Classes List</center></h1>
+    
+    <p>The <b>Classes List</b> contains a list of the incr Tcl classes
+      defined in the target application.</p>
+      
+    <p>The display uses the incr Tcl <b>info</b> command to reconstruct the
+      class definition showing the member variable definitions and the class
+      method code. Only the itcl builtin methods are hidden (these
+      include the cget, configure and info methods).</p>
+      
+    <hr>
+
+<!-- hhmts start -->
+Last modified: Thu Mar 14 23:16:22 GMT 2002
+<!-- hhmts end -->
+
+  </body>
+</html>
index 384dd73cebdeb7420eebcf08263f05144edf52cf..df3d7aeaa9d6fd5ec4aab8a8e495fe0145d4dec2 100644 (file)
@@ -1,66 +1,78 @@
-<html> <head>
-<title>What's New?</title>
-<!-- $Id$ -->
-</head>
+<!doctype HTML public "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+  <head>
+    <title>What's New?</title>
+    <!-- $Id$ -->
+  </head>
 
-<body>
-<center><h1>What's New?</h1></center>
+  <body>
+    <h1><center>What's New?</center></h1>
 
-See the <a href=ChangeLog.html>ChangeLog</a> for more details.
+    See the <a href="ChangeLog">ChangeLog</a> for more details.
+    
+    <h2>Changes in release 5.1.6p6 (14 Mar 2002)</h2>
+    
+    The original code plus some patches have been collected together and
+    added to the <a href="http://sourceforge.net/projects/tkcon">tkcon</a>
+    project as <a href="http://sourceforge.net/">SourceForge</a>. Some
+    general work has been done to bring tkinspect up to date for use with
+    Tcl 8.3 and 8.4 and incr Tcl 3.2.
+    
+    <h2>Changes in release 5.1.6 (23 June 1995)</h2>
+    
+    5.1.6 has only 2 bug fixes, see the 
+    <a href="ChangeLog">ChangeLog</a> if you're really interested.
+    
+    <h2>Changes in release 5.1.4 (21 June 1995)</h2>
+    
+    5.1.4 adds more browsing lists, and has a few refinements.
+    
+    <ul>
+      <li> Added 3 new lists: <a href="Images.html">images</a>,
+        <a href="Menus.html">menus</a>, and 
+        <a href="Canvases.html">canvases</a>.  The images
+        list was contributed by Gero Kohnert
+        <tt>&lt;gero@marvin.franken.de&gt;</tt>.
+      <li> Added <tt>button-3</tt> bindings on lists and value (brings
+        up menu.)
+      <li> Added <b>Update This List</b> menu item to lists.
+      <li> Cleaned up some things for Tk 4.0b4.
+      <li> Renamed the <a href="Miscellany.html">interface function</a>
+        <tt>tkinspect_value_text_window</tt> to
+        <tt>tkinspect_value_text_widget</tt> (now returns the Tk text
+        widget.)  Added <tt>tkinspect_display_image</tt>,
+        <tt>tkinspect_show_list</tt>, and <tt>tkinspect_remove_list</tt>.
+    </ul>
 
-<h2>Changes in release 5.1.6 (23 June 1995)</h2>
-
-5.1.6 has only 2 bug fixes, see the <a
-href=ChangeLog.html>ChangeLog</a> if you're really interested.
-
-<h2>Changes in release 5.1.4 (21 June 1995)</h2>
-
-5.1.4 adds more browsing lists, and has a few refinements.
-
-<ul>
-  <li> Added 3 new lists: <a href=Images.html>images</a>, <a
-       href=Menus.html>menus</a>, and <a
-       href=Canvases.html>canvases</a>.  The images
-       list was contributed by Gero Kohnert
-       <tt>&lt;gero@marvin.franken.de&gt;</tt>.
-  <li> Added <tt>button-3</tt> bindings on lists and value (brings
-       up menu.)
-  <li> Added <b>Update This List</b> menu item to lists.
-  <li> Cleaned up some things for Tk 4.0b4.
-  <li> Renamed the <a href=Miscellany.html>interface function</a>
-       <tt>tkinspect_value_text_window</tt> to
-       <tt>tkinspect_value_text_widget</tt> (now returns the Tk text
-       widget.)  Added <tt>tkinspect_display_image</tt>,
-       <tt>tkinspect_show_list</tt>, and <tt>tkinspect_remove_list</tt>.
-</ul>
-
-<h2>Changes in release 5.1 (5 June 1995)</h2>
-
-5.1 fills in the missing holes of 5.0, fixes a few bugs, and adds some
-features.
-
-<ul>
-  <li> Fixed the bug (?) that caused no interpreters to show up under
-       Tk 4.0b3.
-  <li> Added this HTML help system (renderer based on code from Angel Li
-       <tt>&lt;angel@flipper.rsmas.miami.edu&gt;</tt>.)
-  <li> Added the command line interface.
-  <li> Cleaned up the menus, added some keyboard bindings.
-  <li> <b>tkinspect</b> nows reads <tt>~/.tkinspect_opts</tt> and
-       <tt>.tkinspect_init</tt> (in the current directory.)
-  <li> There's an external interface available.  See <a
-       href=Miscellany>the miscellany help page</a>.
-
-</ul>
-
-
-<h2>Changes in release 5.0 (February 1995)</h2>
-
-Release 5.0 was a complete rewrite of previous versions of
-<b>tkinspect</b>.  This version runs only with Tk 4.0.
-
-<hr>
+    <h2>Changes in release 5.1 (5 June 1995)</h2>
+    
+    5.1 fills in the missing holes of 5.0, fixes a few bugs, and adds some
+    features.
+    
+    <ul>
+      <li> Fixed the bug (?) that caused no interpreters to show up under
+        Tk 4.0b3.
+      <li> Added this HTML help system (renderer based on code from Angel Li
+        <tt>&lt;angel@flipper.rsmas.miami.edu&gt;</tt>.)
+      <li> Added the command line interface.
+      <li> Cleaned up the menus, added some keyboard bindings.
+      <li> <b>tkinspect</b> nows reads <tt>~/.tkinspect_opts</tt> and
+        <tt>.tkinspect_init</tt> (in the current directory.)
+      <li> There's an external interface available.  See 
+        <a href="Miscellany">the miscellany help page</a>.
+        
+    </ul>
+    
+    
+    <h2>Changes in release 5.0 (February 1995)</h2>
+    
+    Release 5.0 was a complete rewrite of previous versions of
+    <b>tkinspect</b>.  This version runs only with Tk 4.0.
+    
+    <hr>
 <!-- hhmts start -->
-Last modified: Fri Jun 23 01:10:55 1995
+Last modified: Thu Mar 14 23:34:01 GMT 2002
 <!-- hhmts end -->
-</body> </html>
+
+  </body>
+</html>
index 381e12fca79e883fe41cb21e3234813a4d8de98e..0411a1271ca3504cf95b795a0253a281b9c2286c 100644 (file)
--- a/about.tcl
+++ b/about.tcl
@@ -7,7 +7,7 @@
 dialog about {
     param obliqueFont -*-helvetica-medium-o-*-*-12-* Font
     param font -*-helvetica-medium-r-*-*-12-* Font
-    param boldFont -*-helvetica-bold-r-*-*-18-* Font 
+    param boldFont -*-helvetica-bold-r-*-*-18-* Font
     method create {} {
        global tkinspect tkinspect_library
        wm withdraw $self
@@ -17,10 +17,11 @@ dialog about {
        label $self.ver \
            -text "Release $tkinspect(release) ($tkinspect(release_date))" \
            -font $slot(font)
-       label $self.com -text "Send comments, suggestions, bugs to:" \
+       label $self.com -text "\nBugs, suggestions and patches to:\n\
+                      http://sourceforge.net/projects/tkcon/\n" \
            -font $slot(obliqueFont)
        frame $self.mug -bd 4
-       label $self.mug.l -text "Sam Shen <slshen@lbl.gov>"
+       label $self.mug.l -text "Originally by\nSam Shen <slshen@lbl.gov>"
        global about_priv
        if ![info exists about_priv(mug_image)] {
            set about_priv(mug_image) \
index 8fba4005391c4b9605bc72d04ed67c82301f4f14..17bf8c192df347de0cb7e2efa0606e3f53f0a89c 100644 (file)
 # E-mail:     sst@bouw.tno.nl
 # URL:        http://huizen.dds.nl/~quintess
 #
+# Itcl 3.2 support by Pat Thoyts <patthoyts@users.sourceforge.net>
+#   The original code is renamed to base_class_list and if a newer
+#   version of incr Tcl is found then we shall override some methods.
+#
 
-widget class_list {
-       object_include tkinspect_list
-       param title "Classes"
-
-       method get_item_name {} {
-               return class
-       }
+widget base_class_list {
+    object_include tkinspect_list
+    param title "Classes"
+    
+    method get_item_name {} {
+        return class
+    }
+    
+    method update {target} {
+        $self clear
+        set classes [lsort [send $target itcl_info classes]]
+        foreach class $classes {
+            $self append $class
+        }
+    }
+    
+    method retrieve {target class} {
+        set res "itcl_class $class {\n"
+        
+        set cmd [list $class :: info inherit]
+        set inh [send $target $cmd]
+        if {$inh != ""} {
+            set res "$res\tinherit $inh\n\n"
+        } else {
+            set res "$res\n"
+        }
+        
+        set pubs [send $target [list $class :: info public]]
+        foreach arg $pubs {
+            regsub {(.*)::} $arg {} a
+            set res "$res\tpublic $a\n"
+        }
+        if {$pubs != ""} {
+            set res "$res\n"
+        }
+        
+        set prots [send $target [list $class :: info protected]]
+        foreach arg $prots {
+            regsub {(.*)::} $arg {} a
+            if {$a != "this"} {
+                set res "$res\tprotected $a\n"
+            }
+        }
+        if {$prots != ""} {
+            set res "$res\n"
+        }
+        
+        set coms [send $target [list $class :: info common]]
+        foreach arg $coms {
+            regsub {(.*)::} $arg {} a
+            set cmd [list $class :: info common $a]
+            set com [send $target $cmd]
+            set res "$res\tcommon $a [list [lindex $com 2]] (default: [list [lindex $com 1]])\n"
+        }
+        if {$coms != ""} {
+            set res "$res\n"
+        }
+        
+        set meths [send $target [list $class :: info method]]
+        foreach arg $meths {
+            if {[string first $class $arg] == 0} {
+                regsub {(.*)::} $arg {} a
+                set cmd [list $class :: info method $a]
+                set meth [send $target $cmd]
+                if {$a != "constructor" && $a != "destructor"} {
+                    set nm "method "
+                } else {
+                    set nm ""
+                }
+                if {[lindex $meth 1] != "<built-in>"} {
+                    set res "$res\t$nm$a [lrange $meth 1 end]\n\n"
+                }
+            }
+        }
+        
+        set procs [send $target [list $class :: info proc]]
+        foreach arg $procs {
+            if {[string first $class $arg] == 0} {
+                regsub {(.*)::} $arg {} a
+                set cmd [list $class :: info proc $a]
+                set proc [send $target $cmd]
+                if {[lindex $proc 1] != "<built-in>"} {
+                    set res "$res\tproc $a [lrange $proc 1 end]\n\n"
+                }
+            }
+        }
+        
+        set res "$res}\n"
+        return $res
+    }
+    
+    method send_filter {value} {
+        return $value
+    }
+}
 
-       method update {target} {
-               $self clear
-               set classes [lsort [send $target itcl_info classes]]
-               foreach class $classes {
-                       $self append $class
-               }
-       }
+# -------------------------------------------------------------------------
+# Handle new versions of incr Tcl
+# -------------------------------------------------------------------------
 
-       method retrieve {target class} {
-               set res "itcl_class $class {\n"
+if {[catch {package versions Itcl} itcl_version]} {
+    set itcl_version 0
+}
 
-               set cmd [list $class :: info inherit]
-               set inh [send $target $cmd]
-               if {$inh != ""} {
-                       set res "$res\tinherit $inh\n\n"
-               } else {
-                       set res "$res\n"
-               }
+if {$itcl_version < 3.2} {
 
-               set pubs [send $target [list $class :: info public]]
-               foreach arg $pubs {
-                       regsub {(.*)::} $arg {} a
-                       set res "$res\tpublic $a\n"
-               }
-               if {$pubs != ""} {
-                       set res "$res\n"
-               }
+    # Older incr Tcl versions
 
-               set prots [send $target [list $class :: info protected]]
-               foreach arg $prots {
-                       regsub {(.*)::} $arg {} a
-                       if {$a != "this"} {
-                               set res "$res\tprotected $a\n"
-                       }
-               }
-               if {$prots != ""} {
-                       set res "$res\n"
-               }
+    widget class_list {
+        object_include tkinspect_list
+        object_include base_class_list
+    }
 
-               set coms [send $target [list $class :: info common]]
-               foreach arg $coms {
-                       regsub {(.*)::} $arg {} a
-                       set cmd [list $class :: info common $a]
-                       set com [send $target $cmd]
-                       set res "$res\tcommon $a [list [lindex $com 2]] (default: [list [lindex $com 1]])\n"
-               }
-               if {$coms != ""} {
-                       set res "$res\n"
-               }
+} else {
 
-               set meths [send $target [list $class :: info method]]
-               foreach arg $meths {
-                       if {[string first $class $arg] == 0} {
-                               regsub {(.*)::} $arg {} a
-                               set cmd [list $class :: info method $a]
-                               set meth [send $target $cmd]
-                               if {$a != "constructor" && $a != "destructor"} {
-                                       set nm "method "
-                               } else {
-                                       set nm ""
-                               }
-                               if {[lindex $meth 1] != "<built-in>"} {
-                                       set res "$res\t$nm$a [lrange $meth 1 end]\n\n"
-                               }
-                       }
-               }
+    # incr Tcl 3.2+
 
-               set procs [send $target [list $class :: info proc]]
-               foreach arg $procs {
-                       if {[string first $class $arg] == 0} {
-                               regsub {(.*)::} $arg {} a
-                               set cmd [list $class :: info proc $a]
-                               set proc [send $target $cmd]
-                               if {[lindex $proc 1] != "<built-in>"} {
-                                       set res "$res\tproc $a [lrange $proc 1 end]\n\n"
-                               }
-                       }
-               }
+    widget class_list {
+        object_include tkinspect_list
+        object_include base_class_list
+        
+        method retrieve {target class} {
+            set res "itcl::class $class {\n"
+            
+            set cmd [list namespace eval $class {info inherit}]
+            set inh [send $target $cmd]
+            if {$inh != ""} {
+                append res "    inherit $inh\n\n"
+            } else {
+                append res "\n"
+            }
+            
+            set vars [send $target namespace eval $class {info variable}]
+            foreach var $vars {
+                set name [namespace tail $var]
+                set cmd [list namespace eval $class \
+                             [list info variable $name -protection -type -name -init]]
+                set text [send $target $cmd]
+                append res "    $text\n"
+            }
+            append res "\n"
+            
+            
+            set funcs [send $target [list namespace eval $class {info function}]]
+            foreach func [lsort $funcs] {
+                set qualclass "::[string trimleft $class :]"
+                if {[string first $qualclass $func] == 0} {
+                    set name [namespace tail $func]
+                    set cmd [list namespace eval $class [list info function $name]]
+                    set text [send $target $cmd]
 
-               set res "$res}\n"
-               return $res
-       }
+                    if {![string match "@itcl-builtin*" [lindex $text 4]]} {
+                        switch -exact -- $name {
+                            constructor {
+                                append res "    $name [lrange $text 3 end]\n"
+                            }
+                            destructor {
+                                append res "    $name [lrange $text 4 end]\n"
+                            }
+                            default {
+                                append res "    [lindex $text 0] [lindex $text 1] $name\
+                                 [lrange $text 3 end]\n"
+                            }
+                        }
+                    }
+                }
+            }
+            
+            append res "}\n"
+            return $res
+        }
+    }
 
-       method send_filter {value} {
-               return $value
-       }
-}
+}
\ No newline at end of file
index b4017335ea1234083eeade8a4d8671a241123581..ae86b58f9188c8ebd90b9f71950929fd4fa4e637 100644 (file)
@@ -4,6 +4,7 @@
 # Provide a command line interface to an application (much of the
 # code is lifted out of the Tk demo rmt).
 #
+# [PT]: this should be replaced by tkcon...
 
 dialog command_line {
     param main
@@ -89,7 +90,8 @@ dialog command_line {
        }
        bind $self.t <Key> "command_line:text_insert $self %A; break"
        $self.t tag configure bold \
-           -font -*-Courier-Bold-R-Normal-*-120-*-*-*-*-*-*
+            -font {Courier 12 bold}
+        #-font -*-Courier-Bold-R-Normal-*-120-*-*-*-*-*-*
        $self prompt
     }
     method destroy {} {
index dd1550ea6d8b68e81a6dc06568ca8c16d5e1a72c..d7a1380078f5504e1a41ae9990f63ab46d7bf3d1 100644 (file)
--- a/help.tcl
+++ b/help.tcl
@@ -4,7 +4,7 @@
 
 dialog help_window {
     param topics {}
-    param width 50
+    param width 100
     param height 35
     param helpdir .
     member history {}
index 08668e022ffd754638981d27af37968cbe446ecb..9676ceb1df520fe756721fcc24a9a557e604d42b 100644 (file)
@@ -5,8 +5,12 @@
 # E-mail:     sst@bouw.tno.nl
 # URL:        http://huizen.dds.nl/~quintess
 #
+# Itcl 3.2 support by Pat Thoyts <patthoyts@users.sourceforge.net>
+#   The original code is renamed to base_class_list and if a newer
+#   version of incr Tcl is found then we shall override some methods.
+#
 
-widget object_list {
+widget base_object_list {
        object_include tkinspect_list
        param title "Objects"
 
@@ -107,3 +111,83 @@ widget object_list {
                return $value
        }
 }
+
+# -------------------------------------------------------------------------
+# Handle new versions of incr Tcl
+# -------------------------------------------------------------------------
+
+if {[catch {package versions Itcl} itcl_version]} {
+    set itcl_version 0
+}
+
+if {$itcl_version < 3.2} {
+
+    # Older incr Tcl versions
+
+    widget object_list {
+        object_include tkinspect_list
+        object_include base_object_list
+    }
+
+} else {
+
+    # incr Tcl 3.2+
+
+    widget object_list {
+        object_include tkinspect_list
+        object_include base_object_list
+
+        method retrieve {target object} {
+            set class [send $target [list $object info class]]
+            set res "$class $object {\n"
+            
+            set cmd [list $object info inherit]
+            set inh [send $target $cmd]
+            if {$inh != ""} {
+                append res "    inherit $inh\n\n"
+            } else {
+                append res "\n"
+            }
+            
+            set vars [send $target $object info variable]
+            foreach var $vars {
+                set name [namespace tail $var]
+                set cmd [list $object info variable $name]
+                set text [send $target $cmd]
+                append res "    $text\n"
+            }
+            append res "\n"
+            
+            
+            set funcs [send $target [list $object info function]]
+            foreach func [lsort $funcs] {
+                set qualclass "::[string trimleft $class :]"
+                if {[string first $qualclass $func] == 0} {
+                    set name [namespace tail $func]
+                    set cmd [list $object info function $name]
+                    set text [send $target $cmd]
+
+                    if {![string match "@itcl-builtin*" [lindex $text 4]]} {
+                        switch -exact -- $name {
+                            constructor {
+                                append res "    $name [lrange $text 3 end]\n"
+                            }
+                            destructor {
+                                append res "    $name [lrange $text 4 end]\n"
+                            }
+                            default {
+                                append res "    [lindex $text 0] [lindex $text 1] $name\
+                                 [lrange $text 3 end]\n"
+                            }
+                        }
+                    }
+                }
+            }
+            
+            append res "}\n"
+            return $res
+        }
+
+    }
+
+}
\ No newline at end of file
index 9fc608365eeddb5298c25ee03bbb208db2842c59..4f35552418d3a9c19899bad5e93be2368cb12c35 100644 (file)
@@ -25,7 +25,7 @@ set tkinspect(list_class_files) {
 }
 set tkinspect(help_topics) {
     Intro Value Lists Procs Globals Windows Images Canvases Menus
-    Value Miscellany Notes WhatsNew ChangeLog
+    Classes Value Miscellany Notes WhatsNew ChangeLog
 }
 
 if {[info commands itcl_info] != ""} {
@@ -81,9 +81,10 @@ proc tkinspect_widgets_init {} {
     }
 }
 
-proc tkinspect_about {} {
+proc tkinspect_about {parent} {
     catch {destroy .about}
     about .about
+    wm transient .about $parent
     .about run
 }
 
@@ -132,7 +133,7 @@ dialog tkinspect_main {
            -underline 0
        pack $self.menu.help -side right
        set m [menu $self.menu.help.m]
-       $m add command -label "About..." -command tkinspect_about \
+       $m add command -label "About..." -command [list tkinspect_about $self]\
            -underline 0
        foreach topic $tkinspect(help_topics) {
            $m add command -label $topic -command [list $self help $topic] \
index 42fcd45f4301ba7fb6d5b6e12e99e86771b5fcfa..05e47ae6fdac1584bb05b6278af45c348525a92d 100644 (file)
@@ -6,17 +6,19 @@
 
 proc version_init {} {
     global tkinspect tk_version tk_patchLevel
-    set tkinspect(release) 5.1.6p3
-    set tkinspect(release_date) "Nov 23, 1997"
+    set tkinspect(release) 5.1.6p6
+    set tkinspect(release_date) "14 Mar 2002"
     scan $tk_version "%d.%d" major minor
     if {$major < 8} {
        puts stderr \
-      "tkinspect-5.1.6.p3 requires Tk 8.x, you appear to be running Tk $major.$minor"
+            "tkinspect-$tkinspect(release) requires Tk 8.x,\
+             you appear to be running Tk $major.$minor"
        exit 1
     }
     if {[scan $tk_patchLevel "4.0b%d" beta] == 1 && $beta < 4} {
        tk_dialog .warning "Warning!" \
-"tkinspect-$tkinspect(release) has only been tested on 4.0b4.  You might have problems running on $tk_patchLevel." warning 0 Ok
+            "tkinspect-$tkinspect(release) has only been tested on 4.0b4.\
+            You might have problems running on $tk_patchLevel." warning 0 Ok
     }
 }