]> granicus.if.org Git - python/commitdiff
Patch #471120: Improved doc strings and new wrappers.
authorMartin v. Löwis <martin@v.loewis.de>
Fri, 2 Nov 2001 23:48:20 +0000 (23:48 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Fri, 2 Nov 2001 23:48:20 +0000 (23:48 +0000)
Lib/lib-tk/Tix.py
Misc/NEWS

index 937d36fad263cae1d6242baf371c38bca84d92c7..5f67a72cd2557d3e8d88e059267c1030b2ca54da 100755 (executable)
@@ -1,11 +1,13 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 #
 # $Id$
 #
-# Tix.py -- Tix widget wrappers, part of PyTix.
+# Tix.py -- Tix widget wrappers.
+#
+#      For Tix, see http://tix.sourceforge.net
 #
 #       - Sudhir Shenoy (sshenoy@gol.com), Dec. 1995.
-#         based on an idea (and a little code !!) of Jean-Marc Lugrin
-#                                               (lugrin@ms.com)
+#         based on an idea of Jean-Marc Lugrin (lugrin@ms.com)
 #
 # NOTE: In order to minimize changes to Tkinter.py, some of the code here
 #       (TixWidget.__init__) has been taken from Tkinter (Widget.__init__)
@@ -51,20 +53,161 @@ ACROSSTOP = 'acrosstop'
 #          in Tkinter (to override Widget initialization) and is therefore
 #          liable to break.
 import Tkinter, os
-class Tk(Tkinter.Tk):
+
+# Could probably add this to Tkinter.Misc
+class tixCommand:
+    """The tix command provides access to miscellaneous  elements
+    of  Tix's  internal state and the Tix application context.
+    Most of the information manipulated by this  command  per
+    tains  to  the  application  as a whole, or to a screen or
+    display, rather than to a particular window.  The  command
+    can  take  any of a number of different forms depending on
+    the option argument.
+
+    This is a mixin class, assumed to be mixed to Tkinter.Tk
+    that supports the self.tk.call method.
+    """
+    def tix_addbitmapdir(self, directory):
+        """Tix maintains a list of directory under which which
+        the  tix_getimage  and tix_getbitmap commands will
+        search for image files. The standard bitmap  direc
+        tory is $TIX_LIBRARY/bitmaps. The addbitmapdir com
+        mand adds directory into this list. By  using  this
+        command, the  image  files  of an applications can
+        also be located using the tix_getimage or tix_getbitmap
+        command.
+        """
+        return self.tk.call('tix', 'addbitmapdir', directory)
+
+    def tix_cget(self, option):
+        """Returns  the  current  value  of the configuration
+        option given by option. Option may be  any  of  the
+        options described in the CONFIGURATION OPTIONS section.
+        """
+        return self.tk.call('tix', 'cget', option)
+
+    def tix_configure(self, cnf=None, **kw):
+        """Query or modify the configuration  options  of  the
+        Tix application context. If no option is specified,
+        returns a list  describing  all  of  the available
+        options  (see  Tk_ConfigureInfo  for information on
+        the format of this list).  If option  is specified
+        with  no value, then  the  command returns a list
+        describing the one named option (this list will  be
+        identical to the corresponding sublist of the value
+        returned if no option is specified).   If  one  or
+        more  option-value  pairs  are  specified, then the
+        command modifies the given option(s)  to have  the
+        given value(s); in this case the command returns an
+        empty string. Option may be  any  of  the  options
+        described in the CONFIGURATION OPTIONS section.
+        """
+        return apply(self.tk.call, ('tix', configure) +
+                      self._options(cnf,kw) )
+
+    def tix_filedialog(self, dlgclass=None):
+        """Returns  the  file  selection  dialog  that  may be
+        shared among different modules of this application.
+        This  command  will  create a file selection dialog
+        widget when it is called the first time. This  dialog
+        will be returned by all subsequent calls to tix
+        filedialog. An  optional dlgclass  parameter  can  be
+        passed  to  specified  what  type of file selection
+        dialog widget is desired. Possible options are 'tix'
+        'FileSelectDialog' or 'tixExFileSelectDialog'.
+        """
+        if dlgclass is not None:
+            return self.tk.call('tix', 'filedialog', dlgclass)
+        else:
+            return self.tk.call('tix', 'filedialog')
+
+    def tix_getbitmap(self, name):
+        """Locates  a bitmap file of the name name.xpm or name
+        in  one  of  the bitmap  directories   (self, see   the
+        tix_addbitmapdir  command  above).  By  using  tix_getbitmap,
+        you can advoid hard coding the pathnames of
+        the bitmap files in your application. When successful,
+        it returns the complete pathname of the bitmap
+        file,  prefixed with the character '@'.  The returned
+        value can be used to configure the  -bitmap  option
+        of the TK and Tix widgets.
+        """
+        return self.tk.call('tix', 'getbitmap', name)
+
+    def tix_getimage(self, name):
+        """Locates an  image  file  of  the  name name.xpm,
+        name.xbm or name.ppm in one of the bitmap  directo
+        ries  (see the addbitmapdir command above). If more
+        than one file with the  same  name  (but different
+        extensions)  exist,  then  the image type is chosen
+        according to the depth of the X display: xbm images
+        are  chosen on monochrome displays and color images
+        are chosen on color displays. By using  tix  getim
+        age,  you  can  advoid hard coding the pathnames of
+        the image files in your application. When  success
+        ful,  this  command  returns  the name of the newly
+        created image, which can be used to  configure  the
+        -image option of the TK and Tix widgets.
+        """
+        return self.tk.call('tix', 'getimage', name)
+
+    def tix_option_get(self, name):
+        """Gets  the options  manitained  by  the  Tix
+        scheme mechanism. Available options are:
+
+            active_bg       active_fg      bg
+            bold_font       dark1_bg       dark1_fg
+            dark2_bg        dark2_fg       disabled_fg
+            fg             fixed_font     font
+            inactive_bg     inactive_fg    input1_bg
+            input2_bg       italic_font    light1_bg
+            light1_fg       light2_bg      light2_fg
+            menu_font       output1_bg     output2_bg
+            select_bg       select_fg      selector
+            """
+        # could use self.tk.globalgetvar('tixOption', name)
+        return self.tk.call('tix', 'option', 'get', name)
+
+    def tix_resetoptions(self, newScheme, newFontSet, newScmPrio=None):
+        """Resets  the  scheme and fontset of the Tix application
+        to  newScheme  and  newFontSet,  respectively.
+        This  affects only those widgets created after this
+        call. Therefore, it is best to  call  the  resetop
+        tions command before the creation of any widgets in
+        a Tix application.
+
+        The optional parameter newScmPrio can be given  to
+        reset  the  priority level of the TK options set by
+        the Tix schemes.
+
+        Because of the way TK handles the X option database, after
+        tixwish has  started  up, it is not possible to reset the
+        color schemes and font sets using the tix config  command.
+        Instead, the tix resetoptions command must be used.
+        """
+        if newScmPrio is not None:
+            return self.tk.call('tix', 'resetoptions', newScheme, newFontSet, newScmPrio)
+        else:
+            return self.tk.call('tix', 'resetoptions', newScheme, newFontSet)
+
+class Tk(Tkinter.Tk, tixCommand):
     """Toplevel widget of Tix which represents mostly the main window
     of an application. It has an associated Tcl interpreter."""
-    def __init__(self, screenName=None, baseName=None, className='Tk'):
+    def __init__(self, screenName=None, baseName=None, className='Tix'):
         Tkinter.Tk.__init__(self, screenName, baseName, className)
         tixlib = os.environ.get('TIX_LIBRARY')
+        self.tk.eval('global auto_path; lappend auto_path [file dir [info nameof]]')
         if tixlib is not None:
             self.tk.eval('global auto_path; lappend auto_path {%s}' % tixlib)
             self.tk.eval('global tcl_pkgPath; lappend tcl_pkgPath {%s}' % tixlib)
         # Load Tix - this should work dynamically or statically
-       # If it's static, lib/tix8.1/pkgIndex.tcl should have 'load {} Tix'
-       # If it's dynamic, it should have 'load libtix8.1.8.2.so Tix'
+        # If it's static, lib/tix8.1/pkgIndex.tcl should have
+        #              'load {} Tix'
+        # If it's dynamic, lib/tix8.1/pkgIndex.tcl should have
+        #              'load libtix8.1.8.3.so Tix'
         self.tk.eval('package require Tix')
 
+
 # The Tix 'tixForm' geometry manager
 class Form:
     """The Tix Form geometry manager
@@ -108,15 +251,17 @@ class Form:
                    self.tk.splitlist(
                        self.tk.call(
                        'tixForm', 'slaves', self._w)))
+
+
     
 
 Tkinter.Widget.__bases__ = Tkinter.Widget.__bases__ + (Form,)
 
-class TixWidget(Widget):
+class TixWidget(Tkinter.Widget):
     """A TixWidget class is used to package all (or most) Tix widgets.
 
     Widget initialization is extended in two ways:
-           1) It is possible to give a list of options which must be part of
+       1) It is possible to give a list of options which must be part of
        the creation command (so called Tix 'static' options). These cannot be
        given as a 'config' command later.
        2) It is possible to give the name of an existing TK widget. These are
@@ -169,13 +314,13 @@ class TixWidget(Widget):
            return self.subwidget_list[name]
        raise AttributeError, name
 
-    # Set a variable without calling its action routine
     def set_silent(self, value):
+       """Set a variable without calling its action routine"""
        self.tk.call('tixSetSilent', self._w, value)
 
-    # Return the named subwidget (which must have been created by
-    # the sub-class).
     def subwidget(self, name):
+       """Return the named subwidget (which must have been created by
+       the sub-class)."""
        n = self._subwidget_name(name)
        if not n:
            raise TclError, "Subwidget " + name + " not child of " + self._name
@@ -183,8 +328,8 @@ class TixWidget(Widget):
        n = n[len(self._w)+1:]
        return self._nametowidget(n)
 
-    # Return all subwidgets
     def subwidgets_all(self):
+       """Return all subwidgets."""
        names = self._subwidget_names()
        if not names:
            return []
@@ -198,23 +343,23 @@ class TixWidget(Widget):
               pass
        return retlist
 
-    # Get a subwidget name (returns a String, not a Widget !)
     def _subwidget_name(self,name):
+       """Get a subwidget name (returns a String, not a Widget !)"""
        try:
            return self.tk.call(self._w, 'subwidget', name)
        except TclError:
            return None
 
-    # Return the name of all subwidgets
     def _subwidget_names(self):
+       """Return the name of all subwidgets."""
        try:
            x = self.tk.call(self._w, 'subwidgets', '-all')
            return self.tk.split(x)
        except TclError:
            return None
 
-    # Set configuration options for all subwidgets (and self)
     def config_all(self, option, value):
+       """Set configuration options for all subwidgets (and self)."""
        if option == '':
            return
        elif type(option) != type(''):
@@ -360,7 +505,9 @@ class Balloon(TixWidget):
        self.tk.call(self._w, 'unbind', widget._w)
 
 class ButtonBox(TixWidget):
-    """ButtonBox - A container for pushbuttons"""
+    """ButtonBox - A container for pushbuttons.
+    Subwidgets are the buttons added with the add method.
+    """
     def __init__(self, master=None, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixButtonBox',
                         ['orientation', 'options'], cnf, kw)
@@ -378,15 +525,17 @@ class ButtonBox(TixWidget):
            self.tk.call(self._w, 'invoke', name)
 
 class ComboBox(TixWidget):
-    """ComboBox - an Entry field with a dropdown menu
+    """ComboBox - an Entry field with a dropdown menu. The user can select a
+    choice by either typing in the entry subwdget or selecting from the
+    listbox subwidget.
 
     Subwidget       Class
     ---------       -----
     entry       Entry
     arrow       Button
-    slistbox       ScrolledListBox
-    tick       Button }
-    cross       Button } present if created with the fancy option"""
+    slistbox    ScrolledListBox
+    tick        Button 
+    cross       Button : present if created with the fancy option"""
 
     def __init__ (self, master=None, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixComboBox', 
@@ -417,7 +566,10 @@ class ComboBox(TixWidget):
        self.tk.call(self._w, 'pick', index)
 
 class Control(TixWidget):
-    """Control - An entry field with value change arrows.
+    """Control - An entry field with value change arrows.  The user can
+    adjust the value by pressing the two arrow buttons or by entering
+    the value directly into the entry. The new value will be checked
+    against the user-defined upper and lower limits.
 
     Subwidget       Class
     ---------       -----
@@ -446,7 +598,9 @@ class Control(TixWidget):
        self.tk.call(self._w, 'update')
 
 class DirList(TixWidget):
-    """DirList - Directory Listing.
+    """DirList - displays a list view of a directory, its previous
+    directories and its sub-directories. The user can choose one of
+    the directories displayed in the list or change to another directory.
 
     Subwidget       Class
     ---------       -----
@@ -464,7 +618,10 @@ class DirList(TixWidget):
        self.tk.call(self._w, 'chdir', dir)
 
 class DirTree(TixWidget):
-    """DirList - Directory Listing in a hierarchical view.
+    """DirTree - Directory Listing in a hierarchical view.
+    Displays a tree view of a directory, its previous directories and its
+    sub-directories. The user can choose one of the directories displayed
+    in the list or change to another directory.
 
     Subwidget       Class
     ---------       -----
@@ -481,8 +638,28 @@ class DirTree(TixWidget):
     def chdir(self, dir):
        self.tk.call(self._w, 'chdir', dir)
 
+class DirSelectBox(TixWidget):
+    """DirSelectBox - Motif style file select box.
+    It is generally used for
+    the user to choose a file. FileSelectBox stores the files mostly
+    recently selected into a ComboBox widget so that they can be quickly
+    selected again.
+    
+    Subwidget       Class
+    ---------       -----
+    selection       ComboBox
+    filter       ComboBox
+    dirlist       ScrolledListBox
+    filelist       ScrolledListBox"""
+
+    def __init__(self, master, cnf={}, **kw):
+       TixWidget.__init__(self, master, 'tixDirSelectBox', ['options'], cnf, kw)
+       self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
+       self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
+
 class ExFileSelectBox(TixWidget):
     """ExFileSelectBox - MS Windows style file select box.
+    It provides an convenient method for the user to select files.
 
     Subwidget       Class
     ---------       -----
@@ -512,8 +689,34 @@ class ExFileSelectBox(TixWidget):
     def invoke(self):
        self.tk.call(self._w, 'invoke')
 
+
+# Should inherit from a Dialog class
+class DirSelectDialog(TixWidget):
+    """The DirSelectDialog widget presents the directories in the file
+    system in a dialog window. The user can use this dialog window to
+    navigate through the file system to select the desired directory.
+
+    Subwidgets       Class
+    ----------       -----
+    dirbox       DirSelectDialog"""
+
+    def __init__(self, master, cnf={}, **kw):
+       TixWidget.__init__(self, master, 'tixDirSelectDialog',
+                        ['options'], cnf, kw)
+       self.subwidget_list['dirbox'] = _dummyDirSelectBox(self, 'dirbox')
+       # cancel and ok buttons are missing
+       
+    def popup(self):
+       self.tk.call(self._w, 'popup')
+
+    def popdown(self):
+       self.tk.call(self._w, 'popdown')
+
+
+# Should inherit from a Dialog class
 class ExFileSelectDialog(TixWidget):
     """ExFileSelectDialog - MS Windows style file select dialog.
+    It provides an convenient method for the user to select files.
 
     Subwidgets       Class
     ----------       -----
@@ -532,7 +735,11 @@ class ExFileSelectDialog(TixWidget):
 
 class FileSelectBox(TixWidget):
     """ExFileSelectBox - Motif style file select box.
-
+    It is generally used for
+    the user to choose a file. FileSelectBox stores the files mostly
+    recently selected into a ComboBox widget so that they can be quickly
+    selected again.
+    
     Subwidget       Class
     ---------       -----
     selection       ComboBox
@@ -553,6 +760,7 @@ class FileSelectBox(TixWidget):
     def invoke(self):
        self.tk.call(self._w, 'invoke')
 
+# Should inherit from a Dialog class
 class FileSelectDialog(TixWidget):
     """FileSelectDialog - Motif style file select dialog.
 
@@ -574,7 +782,10 @@ class FileSelectDialog(TixWidget):
        self.tk.call(self._w, 'popdown')
 
 class FileEntry(TixWidget):
-    """FileEntry - Entry field with button that invokes a FileSelectDialog
+    """FileEntry - Entry field with button that invokes a FileSelectDialog.
+    The user can type in the filename manually. Alternatively, the user can
+    press the button widget that sits next to the entry, which will bring
+    up a file selection dialog.
 
     Subwidgets       Class
     ----------       -----
@@ -595,7 +806,10 @@ class FileEntry(TixWidget):
        pass
 
 class HList(TixWidget):
-    """HList - Hierarchy display.
+    """HList - Hierarchy display  widget can be used to display any data
+    that have a hierarchical structure, for example, file system directory
+    trees. The list entries are indented and connected by branch lines
+    according to their places in the hierachy.
 
     Subwidgets - None"""
 
@@ -785,7 +999,9 @@ class InputOnly(TixWidget):
        TixWidget.__init__(self, master, 'tixInputOnly', None, cnf, kw)
 
 class LabelEntry(TixWidget):
-    """LabelEntry - Entry field with label.
+    """LabelEntry - Entry field with label. Packages an entry widget
+    and a label into one mega widget. It can beused be used to simplify
+    the creation of ``entry-form'' type of interface.
 
     Subwidgets       Class
     ----------       -----
@@ -799,7 +1015,10 @@ class LabelEntry(TixWidget):
        self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
 
 class LabelFrame(TixWidget):
-    """LabelFrame - Labelled Frame container.
+    """LabelFrame - Labelled Frame container. Packages a frame widget
+    and a label into one mega widget. To create widgets inside a
+    LabelFrame widget, one creates the new widgets relative to the
+    frame subwidget and manage them inside the frame subwidget.
 
     Subwidgets       Class
     ----------       -----
@@ -812,13 +1031,46 @@ class LabelFrame(TixWidget):
        self.subwidget_list['label'] = _dummyLabel(self, 'label')
        self.subwidget_list['frame'] = _dummyFrame(self, 'frame')
 
+
+class ListNoteBook(TixWidget):
+    """A ListNoteBook widget is very similar to the TixNoteBook widget:
+    it can be used to display many windows in a limited space using a
+    notebook metaphor. The notebook is divided into a stack of pages
+    (windows). At one time only one of these pages can be shown.
+    The user can navigate through these pages by
+    choosing the name of the desired page in the hlist subwidget."""
+
+    def __init__(self, master, cnf={}, **kw):
+       TixWidget.__init__(self, master, 'tixDirList', ['options'], cnf, kw)
+       self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
+       self.subwidget_list['shlist'] = _dummyScrolledHList(self, 'vsb')
+
+
+    def add(self, name, cnf={}, **kw):
+       apply(self.tk.call,
+             (self._w, 'add', name) + self._options(cnf, kw))
+       self.subwidget_list[name] = TixSubWidget(self, name)
+       return self.subwidget_list[name]
+
+    def raise_page(self, name):              # raise is a python keyword
+       self.tk.call(self._w, 'raise', name)
+
+class Meter(TixWidget):
+    """The Meter widget can be used to show the progress of a background
+    job which may take a long time to execute.
+    """
+
+    def __init__(self, master=None, cnf={}, **kw):
+       TixWidget.__init__(self, master, 'tixMeter',
+                        ['options'], cnf, kw)
+
 class NoteBook(TixWidget):
     """NoteBook - Multi-page container widget (tabbed notebook metaphor).
 
     Subwidgets       Class
     ----------       -----
     nbframe       NoteBookFrame
-    <pages>       g/p widgets added dynamically"""
+    <pages>       page widgets added dynamically with the add method"""
 
     def __init__ (self,master=None,cnf={}, **kw):
        TixWidget.__init__(self,master,'tixNoteBook', ['options'], cnf, kw)
@@ -856,7 +1108,7 @@ class NoteBookFrame(TixWidget):
     pass
 
 class OptionMenu(TixWidget):
-    """OptionMenu - Option menu widget.
+    """OptionMenu - creates a menu button of options.
 
     Subwidget       Class
     ---------       -----
@@ -886,11 +1138,15 @@ class OptionMenu(TixWidget):
        self.tk.call(self._w, 'enable', name)
 
 class PanedWindow(TixWidget):
-    """PanedWindow - Multi-pane container widget. Panes are resizable.
+    """PanedWindow - Multi-pane container widget
+    allows the user to interactively manipulate the sizes of several
+    panes. The panes can be arranged either vertically or horizontally.The
+    user changes the sizes of the panes by dragging the resize handle
+    between two panes.
 
     Subwidgets       Class
     ----------       -----
-    <panes>       g/p widgets added dynamically"""
+    <panes>       g/p widgets added dynamically with the add method."""
 
     def __init__(self, master, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixPanedWindow', ['orientation', 'options'], cnf, kw)
@@ -910,7 +1166,10 @@ class PanedWindow(TixWidget):
        return ret
 
 class PopupMenu(TixWidget):
-    """PopupMenu widget.
+    """PopupMenu widget can be used as a replacement of the tk_popup command.
+    The advantage of the Tix PopupMenu widget is it requires less application
+    code to manipulate.
+
 
     Subwidgets       Class
     ----------       -----
@@ -932,7 +1191,7 @@ class PopupMenu(TixWidget):
        self.tk.call(self._w, 'post', widget._w, x, y)
 
 class ResizeHandle(TixWidget):
-    """Incomplete - no documentation in Tix for this !!!"""
+    """Internal widget to draw resize handles on Scrolled widgets."""
 
     def __init__(self, master, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixResizeHandle',
@@ -942,7 +1201,7 @@ class ResizeHandle(TixWidget):
        self.tk.call(self._w, 'attachwidget', widget._w)
 
 class ScrolledHList(TixWidget):
-    """ScrolledHList - HList with scrollbars."""
+    """ScrolledHList - HList with automatic scrollbars."""
 
     def __init__(self, master, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixScrolledHList', ['options'],
@@ -952,7 +1211,7 @@ class ScrolledHList(TixWidget):
        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 
 class ScrolledListBox(TixWidget):
-    """ScrolledListBox - Listbox with scrollbars."""
+    """ScrolledListBox - Listbox with automatic scrollbars."""
 
     def __init__(self, master, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixScrolledListBox', ['options'], cnf, kw)
@@ -961,7 +1220,7 @@ class ScrolledListBox(TixWidget):
        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 
 class ScrolledText(TixWidget):
-    """ScrolledText - Text with scrollbars."""
+    """ScrolledText - Text with automatic scrollbars."""
 
     def __init__(self, master, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixScrolledText', ['options'], cnf, kw)
@@ -970,7 +1229,7 @@ class ScrolledText(TixWidget):
        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 
 class ScrolledTList(TixWidget):
-    """ScrolledTList - TList with scrollbars."""
+    """ScrolledTList - TList with automatic scrollbars."""
 
     def __init__(self, master, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixScrolledTList', ['options'],
@@ -980,7 +1239,7 @@ class ScrolledTList(TixWidget):
        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 
 class ScrolledWindow(TixWidget):
-    """ScrolledWindow - Window with scrollbars."""
+    """ScrolledWindow - Window with automatic scrollbars."""
 
     def __init__(self, master, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixScrolledWindow', ['options'], cnf, kw)
@@ -989,9 +1248,10 @@ class ScrolledWindow(TixWidget):
        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 
 class Select(TixWidget):
-    """Select - Container for buttons. Can enforce radio buttons etc.
+    """Select - Container of button subwidgets. It can be used to provide
+    radio-box or check-box style of selection options for the user.
 
-    Subwidgets are buttons added dynamically"""
+    Subwidgets are buttons added dynamically using the add method."""
 
     def __init__(self, master, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixSelect',
@@ -1025,7 +1285,12 @@ class StdButtonBox(TixWidget):
            self.tk.call(self._w, 'invoke', name)
 
 class TList(TixWidget):
-    """TList - Hierarchy display.
+    """TList - Hierarchy display widget which can be
+    used to display data in a tabular format. The list entries of a TList
+    widget are similar to the entries in the Tk listbox widget. The main
+    differences are (1) the TList widget can display the list entries in a
+    two dimensional format and (2) you can use graphical images as well as
+    multiple colors and fonts for the list entries.
 
     Subwidgets - None"""
 
@@ -1111,7 +1376,9 @@ class TList(TixWidget):
        apply(self.tk.call, (self._w, 'yview') + args)
 
 class Tree(TixWidget):
-    """Tree - The tixTree widget (general purpose DirList like widget)"""
+    """Tree - The tixTree widget can be used to display hierachical
+    data in a tree form. The user can adjust
+    the view of the tree by opening or closing parts of the tree."""
 
     def __init__(self, master=None, cnf={}, **kw):
        TixWidget.__init__(self, master, 'tixTree',
@@ -1135,6 +1402,45 @@ class Tree(TixWidget):
     def setmode(self, entrypath, mode='none'):
        self.tk.call(self._w, 'setmode', entrypath, mode)
 
+
+# Could try subclassing Tree for CheckList - would need another arg to init
+class CheckList(TixWidget):
+    """The CheckList widget
+    displays a list of items to be selected by the user. CheckList acts
+    similarly to the Tk checkbutton or radiobutton widgets, except it is
+    capable of handling many more items than checkbuttons or radiobuttons.
+    """
+
+    def __init__(self, master=None, cnf={}, **kw):
+        TixWidget.__init__(self, master, 'tixCheckList',
+                           ['options'], cnf, kw)
+        self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
+        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
+        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
+        
+    def autosetmode(self):
+        self.tk.call(self._w, 'autosetmode')
+
+    def close(self, entrypath):
+        self.tk.call(self._w, 'close', entrypath)
+
+    def getmode(self, entrypath):
+        return self.tk.call(self._w, 'getmode', entrypath)
+
+    def open(self, entrypath):
+        self.tk.call(self._w, 'open', entrypath)
+
+    def getselection(self, mode='on'):
+        '''Mode can be on, off, default'''
+        self.tk.call(self._w, 'getselection', mode)
+
+    def getstatus(self, entrypath):
+        self.tk.call(self._w, 'getstatus', entrypath)
+
+    def setstatus(self, entrypath, mode='on'):
+        self.tk.call(self._w, 'setstatus', entrypath, mode)
+
+
 ###########################################################################
 ### The subclassing below is used to instantiate the subwidgets in each ###
 ### mega widget. This allows us to access their methods directly.       ###
@@ -1191,6 +1497,13 @@ class _dummyHList(HList, TixSubWidget):
     def __init__(self, master, name, destroy_physically=1):
        TixSubWidget.__init__(self, master, name, destroy_physically)
 
+class _dummyScrolledHList(ScrolledHList, TixSubWidget):
+    def __init__(self, master, name, destroy_physically=1):
+       TixSubWidget.__init__(self, master, name, destroy_physically)
+       self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
+       self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
+       self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
+
 class _dummyTList(TList, TixSubWidget):
     def __init__(self, master, name, destroy_physically=1):
        TixSubWidget.__init__(self, master, name, destroy_physically)
@@ -1200,8 +1513,11 @@ class _dummyComboBox(ComboBox, TixSubWidget):
        TixSubWidget.__init__(self, master, name, destroy_physically)
        self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
        self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
+       # I'm not sure about this destroy_physically=0 in all cases;
+       # it may depend on if -dropdown is true; I've added as a trial
        self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
-                                                        'slistbox')
+                                                        'slistbox',
+                                                        destroy_physically=0)
        self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox',
                                                  destroy_physically=0)
 
@@ -1212,6 +1528,12 @@ class _dummyDirList(DirList, TixSubWidget):
        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 
+class _dummyDirSelectBox(DirSelectBox, TixSubWidget):
+    def __init__(self, master, name, destroy_physically=1):
+       TixSubWidget.__init__(self, master, name, destroy_physically)
+       self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
+       self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
+
 class _dummyExFileSelectBox(ExFileSelectBox, TixSubWidget):
     def __init__(self, master, name, destroy_physically=1):
        TixSubWidget.__init__(self, master, name, destroy_physically)
@@ -1232,6 +1554,11 @@ class _dummyFileSelectBox(FileSelectBox, TixSubWidget):
        self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
        self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
 
+class _dummyFileComboBox(ComboBox, TixSubWidget):
+    def __init__(self, master, name, destroy_physically=1):
+       TixSubWidget.__init__(self, master, name, destroy_physically)
+       self.subwidget_list['dircbx'] = _dummyComboBox(self, 'dircbx')
+
 class _dummyStdButtonBox(StdButtonBox, TixSubWidget):
     def __init__(self, master, name, destroy_physically=1):
        TixSubWidget.__init__(self, master, name, destroy_physically)
@@ -1264,3 +1591,13 @@ def FileTypeList(dict):
        s = s + '{{' + type + '} {' + type + ' - ' + dict[type] + '}} '
     return s
 
+# Still to be done:
+class CObjView(TixWidget):
+    """This file implements the Canvas Object View widget. This is a base
+    class of IconView. It implements automatic placement/adjustment of the
+    scrollbars according to the canvas objects inside the canvas subwidget.
+    The scrollbars are adjusted so that the canvas is just large enough
+    to see all the objects.
+    """
+    pass
+
index 0dfb969a4a8ed3cf50a5b6b1a8266a151814c2b1..ba2f679044fe4c01f639bc2deeed68fdf4ff20f1 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -46,6 +46,11 @@ Extension modules
 
 Library
 
+- Tix exposes more commands through the classes DirSelectBox,
+  DirSelectDialog, ListNoteBook, Meter, CheckList, and the
+  methods tix_addbitmapdir, tix_cget, tix_configure, tix_filedialog,
+  tix_getbitmap, tix_getimage, tix_option_get, and tix_resetoptions.
+
 - Traceback objects are now scanned by cyclic garbage collection, so
   cycles created by casual use of sys.exc_info() no longer cause
   permanent memory leaks (provided garbage collection is enabled).