mirror of
				https://github.com/python/cpython.git
				synced 2025-10-23 01:43:53 +00:00 
			
		
		
		
	 4a2d98a1e9
			
		
	
	
		4a2d98a1e9
		
			
		
	
	
	
	
		
			
			Co-authored-by: E-Paine <63801254+E-Paine@users.noreply.github.com> Co-authored-by: Zachary Ware <zach@python.org>
		
			
				
	
	
		
			1948 lines
		
	
	
	
		
			75 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			1948 lines
		
	
	
	
		
			75 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Tix.py -- Tix widget wrappers.
 | |
| #
 | |
| #       For Tix, see http://tix.sourceforge.net
 | |
| #
 | |
| #       - Sudhir Shenoy (sshenoy@gol.com), Dec. 1995.
 | |
| #         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__)
 | |
| #       and will break if there are major changes in Tkinter.
 | |
| #
 | |
| # The Tix widgets are represented by a class hierarchy in python with proper
 | |
| # inheritance of base classes.
 | |
| #
 | |
| # As a result after creating a 'w = StdButtonBox', I can write
 | |
| #              w.ok['text'] = 'Who Cares'
 | |
| #    or              w.ok['bg'] = w['bg']
 | |
| # or even       w.ok.invoke()
 | |
| # etc.
 | |
| #
 | |
| # Compare the demo tixwidgets.py to the original Tcl program and you will
 | |
| # appreciate the advantages.
 | |
| #
 | |
| # NOTE: This module is deprecated since Python 3.6.
 | |
| 
 | |
| import os
 | |
| import warnings
 | |
| import tkinter
 | |
| from tkinter import *
 | |
| from tkinter import _cnfmerge
 | |
| 
 | |
| warnings.warn(
 | |
|     'The Tix Tk extension is unmaintained, and the tkinter.tix wrapper module'
 | |
|     ' is deprecated in favor of tkinter.ttk',
 | |
|     DeprecationWarning,
 | |
|     stacklevel=2,
 | |
|     )
 | |
| 
 | |
| # Some more constants (for consistency with Tkinter)
 | |
| WINDOW = 'window'
 | |
| TEXT = 'text'
 | |
| STATUS = 'status'
 | |
| IMMEDIATE = 'immediate'
 | |
| IMAGE = 'image'
 | |
| IMAGETEXT = 'imagetext'
 | |
| BALLOON = 'balloon'
 | |
| AUTO = 'auto'
 | |
| ACROSSTOP = 'acrosstop'
 | |
| 
 | |
| # A few useful constants for the Grid widget
 | |
| ASCII = 'ascii'
 | |
| CELL = 'cell'
 | |
| COLUMN = 'column'
 | |
| DECREASING = 'decreasing'
 | |
| INCREASING = 'increasing'
 | |
| INTEGER = 'integer'
 | |
| MAIN = 'main'
 | |
| MAX = 'max'
 | |
| REAL = 'real'
 | |
| ROW = 'row'
 | |
| S_REGION = 's-region'
 | |
| X_REGION = 'x-region'
 | |
| Y_REGION = 'y-region'
 | |
| 
 | |
| # Some constants used by Tkinter dooneevent()
 | |
| TCL_DONT_WAIT     = 1 << 1
 | |
| TCL_WINDOW_EVENTS = 1 << 2
 | |
| TCL_FILE_EVENTS   = 1 << 3
 | |
| TCL_TIMER_EVENTS  = 1 << 4
 | |
| TCL_IDLE_EVENTS   = 1 << 5
 | |
| TCL_ALL_EVENTS    = 0
 | |
| 
 | |
| # BEWARE - this is implemented by copying some code from the Widget class
 | |
| #          in Tkinter (to override Widget initialization) and is therefore
 | |
| #          liable to break.
 | |
| 
 | |
| # Could probably add this to Tkinter.Misc
 | |
| class tixCommand:
 | |
|     """The tix commands provide access to miscellaneous  elements
 | |
|     of  Tix's  internal state and the Tix application context.
 | |
|     Most of the information manipulated by these  commands pertains
 | |
|     to  the  application  as a whole, or to a screen or
 | |
|     display, rather than to a particular window.
 | |
| 
 | |
|     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 directories under which
 | |
|         the  tix_getimage  and tix_getbitmap commands will
 | |
|         search for image files. The standard bitmap  directory
 | |
|         is $TIX_LIBRARY/bitmaps. The addbitmapdir command
 | |
|         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 dictionary all of the
 | |
|         available options.  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 configuration options.
 | |
|         """
 | |
|         # Copied from Tkinter.py
 | |
|         if kw:
 | |
|             cnf = _cnfmerge((cnf, kw))
 | |
|         elif cnf:
 | |
|             cnf = _cnfmerge(cnf)
 | |
|         if cnf is None:
 | |
|             return self._getconfigure('tix', 'configure')
 | |
|         if isinstance(cnf, str):
 | |
|             return self._getconfigure1('tix', 'configure', '-'+cnf)
 | |
|         return self.tk.call(('tix', 'configure') + self._options(cnf))
 | |
| 
 | |
|     def tix_filedialog(self, dlgclass=None):
 | |
|         """Returns the file selection dialog that may be shared among
 | |
|         different calls from 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 (see the tix_addbitmapdir command above).  By
 | |
|         using tix_getbitmap, you can avoid 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 directories (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_ getimage, you can avoid hard coding the pathnames of the
 | |
|         image files in your application. When successful, 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  maintained  by  the  Tix
 | |
|         scheme mechanism. Available options include:
 | |
| 
 | |
|             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
 | |
|         resetoptions 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 Tix has
 | |
|         been has imported and inited, 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='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, tcl/tix8.1/pkgIndex.tcl should have
 | |
|         #               'load {} Tix'
 | |
|         # If it's dynamic under Unix, tcl/tix8.1/pkgIndex.tcl should have
 | |
|         #               'load libtix8.1.8.3.so Tix'
 | |
|         self.tk.eval('package require Tix')
 | |
| 
 | |
|     def destroy(self):
 | |
|         # For safety, remove the delete_window binding before destroy
 | |
|         self.protocol("WM_DELETE_WINDOW", "")
 | |
|         tkinter.Tk.destroy(self)
 | |
| 
 | |
| # The Tix 'tixForm' geometry manager
 | |
| class Form:
 | |
|     """The Tix Form geometry manager
 | |
| 
 | |
|     Widgets can be arranged by specifying attachments to other widgets.
 | |
|     See Tix documentation for complete details"""
 | |
| 
 | |
|     def config(self, cnf={}, **kw):
 | |
|         self.tk.call('tixForm', self._w, *self._options(cnf, kw))
 | |
| 
 | |
|     form = config
 | |
| 
 | |
|     def __setitem__(self, key, value):
 | |
|         Form.form(self, {key: value})
 | |
| 
 | |
|     def check(self):
 | |
|         return self.tk.call('tixForm', 'check', self._w)
 | |
| 
 | |
|     def forget(self):
 | |
|         self.tk.call('tixForm', 'forget', self._w)
 | |
| 
 | |
|     def grid(self, xsize=0, ysize=0):
 | |
|         if (not xsize) and (not ysize):
 | |
|             x = self.tk.call('tixForm', 'grid', self._w)
 | |
|             y = self.tk.splitlist(x)
 | |
|             z = ()
 | |
|             for x in y:
 | |
|                 z = z + (self.tk.getint(x),)
 | |
|             return z
 | |
|         return self.tk.call('tixForm', 'grid', self._w, xsize, ysize)
 | |
| 
 | |
|     def info(self, option=None):
 | |
|         if not option:
 | |
|             return self.tk.call('tixForm', 'info', self._w)
 | |
|         if option[0] != '-':
 | |
|             option = '-' + option
 | |
|         return self.tk.call('tixForm', 'info', self._w, option)
 | |
| 
 | |
|     def slaves(self):
 | |
|         return [self._nametowidget(x) for x in
 | |
|                 self.tk.splitlist(
 | |
|                        self.tk.call(
 | |
|                        'tixForm', 'slaves', self._w))]
 | |
| 
 | |
| 
 | |
| 
 | |
| tkinter.Widget.__bases__ = tkinter.Widget.__bases__ + (Form,)
 | |
| 
 | |
| 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
 | |
|        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
 | |
|        child widgets created automatically by a Tix mega-widget. The Tk call
 | |
|        to create these widgets is therefore bypassed in TixWidget.__init__
 | |
| 
 | |
|     Both options are for use by subclasses only.
 | |
|     """
 | |
|     def __init__ (self, master=None, widgetName=None,
 | |
|                 static_options=None, cnf={}, kw={}):
 | |
|         # Merge keywords and dictionary arguments
 | |
|         if kw:
 | |
|             cnf = _cnfmerge((cnf, kw))
 | |
|         else:
 | |
|             cnf = _cnfmerge(cnf)
 | |
| 
 | |
|         # Move static options into extra. static_options must be
 | |
|         # a list of keywords (or None).
 | |
|         extra=()
 | |
| 
 | |
|         # 'options' is always a static option
 | |
|         if static_options:
 | |
|             static_options.append('options')
 | |
|         else:
 | |
|             static_options = ['options']
 | |
| 
 | |
|         for k,v in list(cnf.items()):
 | |
|             if k in static_options:
 | |
|                 extra = extra + ('-' + k, v)
 | |
|                 del cnf[k]
 | |
| 
 | |
|         self.widgetName = widgetName
 | |
|         Widget._setup(self, master, cnf)
 | |
| 
 | |
|         # If widgetName is None, this is a dummy creation call where the
 | |
|         # corresponding Tk widget has already been created by Tix
 | |
|         if widgetName:
 | |
|             self.tk.call(widgetName, self._w, *extra)
 | |
| 
 | |
|         # Non-static options - to be done via a 'config' command
 | |
|         if cnf:
 | |
|             Widget.config(self, cnf)
 | |
| 
 | |
|         # Dictionary to hold subwidget names for easier access. We can't
 | |
|         # use the children list because the public Tix names may not be the
 | |
|         # same as the pathname component
 | |
|         self.subwidget_list = {}
 | |
| 
 | |
|     # We set up an attribute access function so that it is possible to
 | |
|     # do w.ok['text'] = 'Hello' rather than w.subwidget('ok')['text'] = 'Hello'
 | |
|     # when w is a StdButtonBox.
 | |
|     # We can even do w.ok.invoke() because w.ok is subclassed from the
 | |
|     # Button class if you go through the proper constructors
 | |
|     def __getattr__(self, name):
 | |
|         if name in self.subwidget_list:
 | |
|             return self.subwidget_list[name]
 | |
|         raise AttributeError(name)
 | |
| 
 | |
|     def set_silent(self, value):
 | |
|         """Set a variable without calling its action routine"""
 | |
|         self.tk.call('tixSetSilent', self._w, value)
 | |
| 
 | |
|     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)
 | |
|         # Remove header of name and leading dot
 | |
|         n = n[len(self._w)+1:]
 | |
|         return self._nametowidget(n)
 | |
| 
 | |
|     def subwidgets_all(self):
 | |
|         """Return all subwidgets."""
 | |
|         names = self._subwidget_names()
 | |
|         if not names:
 | |
|             return []
 | |
|         retlist = []
 | |
|         for name in names:
 | |
|             name = name[len(self._w)+1:]
 | |
|             try:
 | |
|                 retlist.append(self._nametowidget(name))
 | |
|             except:
 | |
|                 # some of the widgets are unknown e.g. border in LabelFrame
 | |
|                 pass
 | |
|         return retlist
 | |
| 
 | |
|     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
 | |
| 
 | |
|     def _subwidget_names(self):
 | |
|         """Return the name of all subwidgets."""
 | |
|         try:
 | |
|             x = self.tk.call(self._w, 'subwidgets', '-all')
 | |
|             return self.tk.splitlist(x)
 | |
|         except TclError:
 | |
|             return None
 | |
| 
 | |
|     def config_all(self, option, value):
 | |
|         """Set configuration options for all subwidgets (and self)."""
 | |
|         if option == '':
 | |
|             return
 | |
|         elif not isinstance(option, str):
 | |
|             option = repr(option)
 | |
|         if not isinstance(value, str):
 | |
|             value = repr(value)
 | |
|         names = self._subwidget_names()
 | |
|         for name in names:
 | |
|             self.tk.call(name, 'configure', '-' + option, value)
 | |
|     # These are missing from Tkinter
 | |
|     def image_create(self, imgtype, cnf={}, master=None, **kw):
 | |
|         if master is None:
 | |
|             master = self
 | |
|         if kw and cnf: cnf = _cnfmerge((cnf, kw))
 | |
|         elif kw: cnf = kw
 | |
|         options = ()
 | |
|         for k, v in cnf.items():
 | |
|             if callable(v):
 | |
|                 v = self._register(v)
 | |
|             options = options + ('-'+k, v)
 | |
|         return master.tk.call(('image', 'create', imgtype,) + options)
 | |
|     def image_delete(self, imgname):
 | |
|         try:
 | |
|             self.tk.call('image', 'delete', imgname)
 | |
|         except TclError:
 | |
|             # May happen if the root was destroyed
 | |
|             pass
 | |
| 
 | |
| # Subwidgets are child widgets created automatically by mega-widgets.
 | |
| # In python, we have to create these subwidgets manually to mirror their
 | |
| # existence in Tk/Tix.
 | |
| class TixSubWidget(TixWidget):
 | |
|     """Subwidget class.
 | |
| 
 | |
|     This is used to mirror child widgets automatically created
 | |
|     by Tix/Tk as part of a mega-widget in Python (which is not informed
 | |
|     of this)"""
 | |
| 
 | |
|     def __init__(self, master, name,
 | |
|                destroy_physically=1, check_intermediate=1):
 | |
|         if check_intermediate:
 | |
|             path = master._subwidget_name(name)
 | |
|             try:
 | |
|                 path = path[len(master._w)+1:]
 | |
|                 plist = path.split('.')
 | |
|             except:
 | |
|                 plist = []
 | |
| 
 | |
|         if not check_intermediate:
 | |
|             # immediate descendant
 | |
|             TixWidget.__init__(self, master, None, None, {'name' : name})
 | |
|         else:
 | |
|             # Ensure that the intermediate widgets exist
 | |
|             parent = master
 | |
|             for i in range(len(plist) - 1):
 | |
|                 n = '.'.join(plist[:i+1])
 | |
|                 try:
 | |
|                     w = master._nametowidget(n)
 | |
|                     parent = w
 | |
|                 except KeyError:
 | |
|                     # Create the intermediate widget
 | |
|                     parent = TixSubWidget(parent, plist[i],
 | |
|                                           destroy_physically=0,
 | |
|                                           check_intermediate=0)
 | |
|             # The Tk widget name is in plist, not in name
 | |
|             if plist:
 | |
|                 name = plist[-1]
 | |
|             TixWidget.__init__(self, parent, None, None, {'name' : name})
 | |
|         self.destroy_physically = destroy_physically
 | |
| 
 | |
|     def destroy(self):
 | |
|         # For some widgets e.g., a NoteBook, when we call destructors,
 | |
|         # we must be careful not to destroy the frame widget since this
 | |
|         # also destroys the parent NoteBook thus leading to an exception
 | |
|         # in Tkinter when it finally calls Tcl to destroy the NoteBook
 | |
|         for c in list(self.children.values()): c.destroy()
 | |
|         if self._name in self.master.children:
 | |
|             del self.master.children[self._name]
 | |
|         if self._name in self.master.subwidget_list:
 | |
|             del self.master.subwidget_list[self._name]
 | |
|         if self.destroy_physically:
 | |
|             # This is bypassed only for a few widgets
 | |
|             self.tk.call('destroy', self._w)
 | |
| 
 | |
| 
 | |
| # Useful class to create a display style - later shared by many items.
 | |
| # Contributed by Steffen Kremser
 | |
| class DisplayStyle:
 | |
|     """DisplayStyle - handle configuration options shared by
 | |
|     (multiple) Display Items"""
 | |
| 
 | |
|     def __init__(self, itemtype, cnf={}, *, master=None, **kw):
 | |
|         if master is None:
 | |
|             if 'refwindow' in kw:
 | |
|                 master = kw['refwindow']
 | |
|             elif 'refwindow' in cnf:
 | |
|                 master = cnf['refwindow']
 | |
|             else:
 | |
|                 master = tkinter._get_default_root('create display style')
 | |
|         self.tk = master.tk
 | |
|         self.stylename = self.tk.call('tixDisplayStyle', itemtype,
 | |
|                             *self._options(cnf,kw) )
 | |
| 
 | |
|     def __str__(self):
 | |
|         return self.stylename
 | |
| 
 | |
|     def _options(self, cnf, kw):
 | |
|         if kw and cnf:
 | |
|             cnf = _cnfmerge((cnf, kw))
 | |
|         elif kw:
 | |
|             cnf = kw
 | |
|         opts = ()
 | |
|         for k, v in cnf.items():
 | |
|             opts = opts + ('-'+k, v)
 | |
|         return opts
 | |
| 
 | |
|     def delete(self):
 | |
|         self.tk.call(self.stylename, 'delete')
 | |
| 
 | |
|     def __setitem__(self,key,value):
 | |
|         self.tk.call(self.stylename, 'configure', '-%s'%key, value)
 | |
| 
 | |
|     def config(self, cnf={}, **kw):
 | |
|         return self._getconfigure(
 | |
|             self.stylename, 'configure', *self._options(cnf,kw))
 | |
| 
 | |
|     def __getitem__(self,key):
 | |
|         return self.tk.call(self.stylename, 'cget', '-%s'%key)
 | |
| 
 | |
| 
 | |
| ######################################################
 | |
| ### The Tix Widget classes - in alphabetical order ###
 | |
| ######################################################
 | |
| 
 | |
| class Balloon(TixWidget):
 | |
|     """Balloon help widget.
 | |
| 
 | |
|     Subwidget       Class
 | |
|     ---------       -----
 | |
|     label           Label
 | |
|     message         Message"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixShell
 | |
|     def __init__(self, master=None, cnf={}, **kw):
 | |
|         # static seem to be -installcolormap -initwait -statusbar -cursor
 | |
|         static = ['options', 'installcolormap', 'initwait', 'statusbar',
 | |
|                   'cursor']
 | |
|         TixWidget.__init__(self, master, 'tixBalloon', static, cnf, kw)
 | |
|         self.subwidget_list['label'] = _dummyLabel(self, 'label',
 | |
|                                                    destroy_physically=0)
 | |
|         self.subwidget_list['message'] = _dummyLabel(self, 'message',
 | |
|                                                      destroy_physically=0)
 | |
| 
 | |
|     def bind_widget(self, widget, cnf={}, **kw):
 | |
|         """Bind balloon widget to another.
 | |
|         One balloon widget may be bound to several widgets at the same time"""
 | |
|         self.tk.call(self._w, 'bind', widget._w, *self._options(cnf, kw))
 | |
| 
 | |
|     def unbind_widget(self, widget):
 | |
|         self.tk.call(self._w, 'unbind', widget._w)
 | |
| 
 | |
| class ButtonBox(TixWidget):
 | |
|     """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)
 | |
| 
 | |
|     def add(self, name, cnf={}, **kw):
 | |
|         """Add a button with given name to box."""
 | |
| 
 | |
|         btn = self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
 | |
|         self.subwidget_list[name] = _dummyButton(self, name)
 | |
|         return btn
 | |
| 
 | |
|     def invoke(self, name):
 | |
|         if name in self.subwidget_list:
 | |
|             self.tk.call(self._w, 'invoke', name)
 | |
| 
 | |
| class ComboBox(TixWidget):
 | |
|     """ComboBox - an Entry field with a dropdown menu. The user can select a
 | |
|     choice by either typing in the entry subwidget 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"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixLabelWidget
 | |
|     def __init__ (self, master=None, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixComboBox',
 | |
|                            ['editable', 'dropdown', 'fancy', 'options'],
 | |
|                            cnf, kw)
 | |
|         self.subwidget_list['label'] = _dummyLabel(self, 'label')
 | |
|         self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
 | |
|         self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
 | |
|         self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
 | |
|                                                                 'slistbox')
 | |
|         try:
 | |
|             self.subwidget_list['tick'] = _dummyButton(self, 'tick')
 | |
|             self.subwidget_list['cross'] = _dummyButton(self, 'cross')
 | |
|         except TypeError:
 | |
|             # unavailable when -fancy not specified
 | |
|             pass
 | |
| 
 | |
|     # align
 | |
| 
 | |
|     def add_history(self, str):
 | |
|         self.tk.call(self._w, 'addhistory', str)
 | |
| 
 | |
|     def append_history(self, str):
 | |
|         self.tk.call(self._w, 'appendhistory', str)
 | |
| 
 | |
|     def insert(self, index, str):
 | |
|         self.tk.call(self._w, 'insert', index, str)
 | |
| 
 | |
|     def pick(self, index):
 | |
|         self.tk.call(self._w, 'pick', index)
 | |
| 
 | |
| class Control(TixWidget):
 | |
|     """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
 | |
|     ---------       -----
 | |
|     incr       Button
 | |
|     decr       Button
 | |
|     entry       Entry
 | |
|     label       Label"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixLabelWidget
 | |
|     def __init__ (self, master=None, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixControl', ['options'], cnf, kw)
 | |
|         self.subwidget_list['incr'] = _dummyButton(self, 'incr')
 | |
|         self.subwidget_list['decr'] = _dummyButton(self, 'decr')
 | |
|         self.subwidget_list['label'] = _dummyLabel(self, 'label')
 | |
|         self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
 | |
| 
 | |
|     def decrement(self):
 | |
|         self.tk.call(self._w, 'decr')
 | |
| 
 | |
|     def increment(self):
 | |
|         self.tk.call(self._w, 'incr')
 | |
| 
 | |
|     def invoke(self):
 | |
|         self.tk.call(self._w, 'invoke')
 | |
| 
 | |
|     def update(self):
 | |
|         self.tk.call(self._w, 'update')
 | |
| 
 | |
| class DirList(TixWidget):
 | |
|     """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
 | |
|     ---------       -----
 | |
|     hlist       HList
 | |
|     hsb              Scrollbar
 | |
|     vsb              Scrollbar"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixScrolledHList
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixDirList', ['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 chdir(self, dir):
 | |
|         self.tk.call(self._w, 'chdir', dir)
 | |
| 
 | |
| class DirTree(TixWidget):
 | |
|     """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
 | |
|     ---------       -----
 | |
|     hlist           HList
 | |
|     hsb             Scrollbar
 | |
|     vsb             Scrollbar"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixScrolledHList
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixDirTree', ['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 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 a convenient method for the user to select files.
 | |
| 
 | |
|     Subwidget       Class
 | |
|     ---------       -----
 | |
|     cancel       Button
 | |
|     ok              Button
 | |
|     hidden       Checkbutton
 | |
|     types       ComboBox
 | |
|     dir              ComboBox
 | |
|     file       ComboBox
 | |
|     dirlist       ScrolledListBox
 | |
|     filelist       ScrolledListBox"""
 | |
| 
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixExFileSelectBox', ['options'], cnf, kw)
 | |
|         self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
 | |
|         self.subwidget_list['ok'] = _dummyButton(self, 'ok')
 | |
|         self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
 | |
|         self.subwidget_list['types'] = _dummyComboBox(self, 'types')
 | |
|         self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
 | |
|         self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
 | |
|         self.subwidget_list['file'] = _dummyComboBox(self, 'file')
 | |
|         self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
 | |
| 
 | |
|     def filter(self):
 | |
|         self.tk.call(self._w, 'filter')
 | |
| 
 | |
|     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"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixDialogShell
 | |
|     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 a convenient method for the user to select files.
 | |
| 
 | |
|     Subwidgets       Class
 | |
|     ----------       -----
 | |
|     fsbox       ExFileSelectBox"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixDialogShell
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixExFileSelectDialog',
 | |
|                            ['options'], cnf, kw)
 | |
|         self.subwidget_list['fsbox'] = _dummyExFileSelectBox(self, 'fsbox')
 | |
| 
 | |
|     def popup(self):
 | |
|         self.tk.call(self._w, 'popup')
 | |
| 
 | |
|     def popdown(self):
 | |
|         self.tk.call(self._w, 'popdown')
 | |
| 
 | |
| 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
 | |
|     filter          ComboBox
 | |
|     dirlist         ScrolledListBox
 | |
|     filelist        ScrolledListBox"""
 | |
| 
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixFileSelectBox', ['options'], cnf, kw)
 | |
|         self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
 | |
|         self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
 | |
|         self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
 | |
|         self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
 | |
| 
 | |
|     def apply_filter(self):              # name of subwidget is same as command
 | |
|         self.tk.call(self._w, 'filter')
 | |
| 
 | |
|     def invoke(self):
 | |
|         self.tk.call(self._w, 'invoke')
 | |
| 
 | |
| # Should inherit from a Dialog class
 | |
| class FileSelectDialog(TixWidget):
 | |
|     """FileSelectDialog - Motif style file select dialog.
 | |
| 
 | |
|     Subwidgets       Class
 | |
|     ----------       -----
 | |
|     btns       StdButtonBox
 | |
|     fsbox       FileSelectBox"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixStdDialogShell
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixFileSelectDialog',
 | |
|                            ['options'], cnf, kw)
 | |
|         self.subwidget_list['btns'] = _dummyStdButtonBox(self, 'btns')
 | |
|         self.subwidget_list['fsbox'] = _dummyFileSelectBox(self, 'fsbox')
 | |
| 
 | |
|     def popup(self):
 | |
|         self.tk.call(self._w, 'popup')
 | |
| 
 | |
|     def popdown(self):
 | |
|         self.tk.call(self._w, 'popdown')
 | |
| 
 | |
| class FileEntry(TixWidget):
 | |
|     """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
 | |
|     ----------       -----
 | |
|     button       Button
 | |
|     entry       Entry"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixLabelWidget
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixFileEntry',
 | |
|                            ['dialogtype', 'options'], cnf, kw)
 | |
|         self.subwidget_list['button'] = _dummyButton(self, 'button')
 | |
|         self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
 | |
| 
 | |
|     def invoke(self):
 | |
|         self.tk.call(self._w, 'invoke')
 | |
| 
 | |
|     def file_dialog(self):
 | |
|         # FIXME: return python object
 | |
|         pass
 | |
| 
 | |
| class HList(TixWidget, XView, YView):
 | |
|     """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 hierarchy.
 | |
| 
 | |
|     Subwidgets - None"""
 | |
| 
 | |
|     def __init__ (self,master=None,cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixHList',
 | |
|                            ['columns', 'options'], cnf, kw)
 | |
| 
 | |
|     def add(self, entry, cnf={}, **kw):
 | |
|         return self.tk.call(self._w, 'add', entry, *self._options(cnf, kw))
 | |
| 
 | |
|     def add_child(self, parent=None, cnf={}, **kw):
 | |
|         if parent is None:
 | |
|             parent = ''
 | |
|         return self.tk.call(
 | |
|                      self._w, 'addchild', parent, *self._options(cnf, kw))
 | |
| 
 | |
|     def anchor_set(self, entry):
 | |
|         self.tk.call(self._w, 'anchor', 'set', entry)
 | |
| 
 | |
|     def anchor_clear(self):
 | |
|         self.tk.call(self._w, 'anchor', 'clear')
 | |
| 
 | |
|     def column_width(self, col=0, width=None, chars=None):
 | |
|         if not chars:
 | |
|             return self.tk.call(self._w, 'column', 'width', col, width)
 | |
|         else:
 | |
|             return self.tk.call(self._w, 'column', 'width', col,
 | |
|                                 '-char', chars)
 | |
| 
 | |
|     def delete_all(self):
 | |
|         self.tk.call(self._w, 'delete', 'all')
 | |
| 
 | |
|     def delete_entry(self, entry):
 | |
|         self.tk.call(self._w, 'delete', 'entry', entry)
 | |
| 
 | |
|     def delete_offsprings(self, entry):
 | |
|         self.tk.call(self._w, 'delete', 'offsprings', entry)
 | |
| 
 | |
|     def delete_siblings(self, entry):
 | |
|         self.tk.call(self._w, 'delete', 'siblings', entry)
 | |
| 
 | |
|     def dragsite_set(self, index):
 | |
|         self.tk.call(self._w, 'dragsite', 'set', index)
 | |
| 
 | |
|     def dragsite_clear(self):
 | |
|         self.tk.call(self._w, 'dragsite', 'clear')
 | |
| 
 | |
|     def dropsite_set(self, index):
 | |
|         self.tk.call(self._w, 'dropsite', 'set', index)
 | |
| 
 | |
|     def dropsite_clear(self):
 | |
|         self.tk.call(self._w, 'dropsite', 'clear')
 | |
| 
 | |
|     def header_create(self, col, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'header', 'create', col, *self._options(cnf, kw))
 | |
| 
 | |
|     def header_configure(self, col, cnf={}, **kw):
 | |
|         if cnf is None:
 | |
|             return self._getconfigure(self._w, 'header', 'configure', col)
 | |
|         self.tk.call(self._w, 'header', 'configure', col,
 | |
|                      *self._options(cnf, kw))
 | |
| 
 | |
|     def header_cget(self,  col, opt):
 | |
|         return self.tk.call(self._w, 'header', 'cget', col, opt)
 | |
| 
 | |
|     def header_exists(self,  col):
 | |
|         # A workaround to Tix library bug (issue #25464).
 | |
|         # The documented command is "exists", but only erroneous "exist" is
 | |
|         # accepted.
 | |
|         return self.tk.getboolean(self.tk.call(self._w, 'header', 'exist', col))
 | |
|     header_exist = header_exists
 | |
| 
 | |
|     def header_delete(self, col):
 | |
|         self.tk.call(self._w, 'header', 'delete', col)
 | |
| 
 | |
|     def header_size(self, col):
 | |
|         return self.tk.call(self._w, 'header', 'size', col)
 | |
| 
 | |
|     def hide_entry(self, entry):
 | |
|         self.tk.call(self._w, 'hide', 'entry', entry)
 | |
| 
 | |
|     def indicator_create(self, entry, cnf={}, **kw):
 | |
|         self.tk.call(
 | |
|               self._w, 'indicator', 'create', entry, *self._options(cnf, kw))
 | |
| 
 | |
|     def indicator_configure(self, entry, cnf={}, **kw):
 | |
|         if cnf is None:
 | |
|             return self._getconfigure(
 | |
|                 self._w, 'indicator', 'configure', entry)
 | |
|         self.tk.call(
 | |
|               self._w, 'indicator', 'configure', entry, *self._options(cnf, kw))
 | |
| 
 | |
|     def indicator_cget(self,  entry, opt):
 | |
|         return self.tk.call(self._w, 'indicator', 'cget', entry, opt)
 | |
| 
 | |
|     def indicator_exists(self,  entry):
 | |
|         return self.tk.call (self._w, 'indicator', 'exists', entry)
 | |
| 
 | |
|     def indicator_delete(self, entry):
 | |
|         self.tk.call(self._w, 'indicator', 'delete', entry)
 | |
| 
 | |
|     def indicator_size(self, entry):
 | |
|         return self.tk.call(self._w, 'indicator', 'size', entry)
 | |
| 
 | |
|     def info_anchor(self):
 | |
|         return self.tk.call(self._w, 'info', 'anchor')
 | |
| 
 | |
|     def info_bbox(self, entry):
 | |
|         return self._getints(
 | |
|                 self.tk.call(self._w, 'info', 'bbox', entry)) or None
 | |
| 
 | |
|     def info_children(self, entry=None):
 | |
|         c = self.tk.call(self._w, 'info', 'children', entry)
 | |
|         return self.tk.splitlist(c)
 | |
| 
 | |
|     def info_data(self, entry):
 | |
|         return self.tk.call(self._w, 'info', 'data', entry)
 | |
| 
 | |
|     def info_dragsite(self):
 | |
|         return self.tk.call(self._w, 'info', 'dragsite')
 | |
| 
 | |
|     def info_dropsite(self):
 | |
|         return self.tk.call(self._w, 'info', 'dropsite')
 | |
| 
 | |
|     def info_exists(self, entry):
 | |
|         return self.tk.call(self._w, 'info', 'exists', entry)
 | |
| 
 | |
|     def info_hidden(self, entry):
 | |
|         return self.tk.call(self._w, 'info', 'hidden', entry)
 | |
| 
 | |
|     def info_next(self, entry):
 | |
|         return self.tk.call(self._w, 'info', 'next', entry)
 | |
| 
 | |
|     def info_parent(self, entry):
 | |
|         return self.tk.call(self._w, 'info', 'parent', entry)
 | |
| 
 | |
|     def info_prev(self, entry):
 | |
|         return self.tk.call(self._w, 'info', 'prev', entry)
 | |
| 
 | |
|     def info_selection(self):
 | |
|         c = self.tk.call(self._w, 'info', 'selection')
 | |
|         return self.tk.splitlist(c)
 | |
| 
 | |
|     def item_cget(self, entry, col, opt):
 | |
|         return self.tk.call(self._w, 'item', 'cget', entry, col, opt)
 | |
| 
 | |
|     def item_configure(self, entry, col, cnf={}, **kw):
 | |
|         if cnf is None:
 | |
|             return self._getconfigure(self._w, 'item', 'configure', entry, col)
 | |
|         self.tk.call(self._w, 'item', 'configure', entry, col,
 | |
|               *self._options(cnf, kw))
 | |
| 
 | |
|     def item_create(self, entry, col, cnf={}, **kw):
 | |
|         self.tk.call(
 | |
|               self._w, 'item', 'create', entry, col, *self._options(cnf, kw))
 | |
| 
 | |
|     def item_exists(self, entry, col):
 | |
|         return self.tk.call(self._w, 'item', 'exists', entry, col)
 | |
| 
 | |
|     def item_delete(self, entry, col):
 | |
|         self.tk.call(self._w, 'item', 'delete', entry, col)
 | |
| 
 | |
|     def entrycget(self, entry, opt):
 | |
|         return self.tk.call(self._w, 'entrycget', entry, opt)
 | |
| 
 | |
|     def entryconfigure(self, entry, cnf={}, **kw):
 | |
|         if cnf is None:
 | |
|             return self._getconfigure(self._w, 'entryconfigure', entry)
 | |
|         self.tk.call(self._w, 'entryconfigure', entry,
 | |
|               *self._options(cnf, kw))
 | |
| 
 | |
|     def nearest(self, y):
 | |
|         return self.tk.call(self._w, 'nearest', y)
 | |
| 
 | |
|     def see(self, entry):
 | |
|         self.tk.call(self._w, 'see', entry)
 | |
| 
 | |
|     def selection_clear(self, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw))
 | |
| 
 | |
|     def selection_includes(self, entry):
 | |
|         return self.tk.call(self._w, 'selection', 'includes', entry)
 | |
| 
 | |
|     def selection_set(self, first, last=None):
 | |
|         self.tk.call(self._w, 'selection', 'set', first, last)
 | |
| 
 | |
|     def show_entry(self, entry):
 | |
|         return self.tk.call(self._w, 'show', 'entry', entry)
 | |
| 
 | |
| class InputOnly(TixWidget):
 | |
|     """InputOnly - Invisible widget. Unix only.
 | |
| 
 | |
|     Subwidgets - None"""
 | |
| 
 | |
|     def __init__ (self,master=None,cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixInputOnly', None, cnf, kw)
 | |
| 
 | |
| class LabelEntry(TixWidget):
 | |
|     """LabelEntry - Entry field with label. Packages an entry widget
 | |
|     and a label into one mega widget. It can be used to simplify the creation
 | |
|     of ``entry-form'' type of interface.
 | |
| 
 | |
|     Subwidgets       Class
 | |
|     ----------       -----
 | |
|     label       Label
 | |
|     entry       Entry"""
 | |
| 
 | |
|     def __init__ (self,master=None,cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixLabelEntry',
 | |
|                            ['labelside','options'], cnf, kw)
 | |
|         self.subwidget_list['label'] = _dummyLabel(self, 'label')
 | |
|         self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
 | |
| 
 | |
| class LabelFrame(TixWidget):
 | |
|     """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
 | |
|     ----------       -----
 | |
|     label       Label
 | |
|     frame       Frame"""
 | |
| 
 | |
|     def __init__ (self,master=None,cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixLabelFrame',
 | |
|                            ['labelside','options'], cnf, kw)
 | |
|         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, 'tixListNoteBook', ['options'], cnf, kw)
 | |
|         # Is this necessary? It's not an exposed subwidget in Tix.
 | |
|         self.subwidget_list['pane'] = _dummyPanedWindow(self, 'pane',
 | |
|                                                         destroy_physically=0)
 | |
|         self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
 | |
|         self.subwidget_list['shlist'] = _dummyScrolledHList(self, 'shlist')
 | |
| 
 | |
|     def add(self, name, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
 | |
|         self.subwidget_list[name] = TixSubWidget(self, name)
 | |
|         return self.subwidget_list[name]
 | |
| 
 | |
|     def page(self, name):
 | |
|         return self.subwidget(name)
 | |
| 
 | |
|     def pages(self):
 | |
|         # Can't call subwidgets_all directly because we don't want .nbframe
 | |
|         names = self.tk.splitlist(self.tk.call(self._w, 'pages'))
 | |
|         ret = []
 | |
|         for x in names:
 | |
|             ret.append(self.subwidget(x))
 | |
|         return ret
 | |
| 
 | |
|     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>       page widgets added dynamically with the add method"""
 | |
| 
 | |
|     def __init__ (self,master=None,cnf={}, **kw):
 | |
|         TixWidget.__init__(self,master,'tixNoteBook', ['options'], cnf, kw)
 | |
|         self.subwidget_list['nbframe'] = TixSubWidget(self, 'nbframe',
 | |
|                                                       destroy_physically=0)
 | |
| 
 | |
|     def add(self, name, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
 | |
|         self.subwidget_list[name] = TixSubWidget(self, name)
 | |
|         return self.subwidget_list[name]
 | |
| 
 | |
|     def delete(self, name):
 | |
|         self.tk.call(self._w, 'delete', name)
 | |
|         self.subwidget_list[name].destroy()
 | |
|         del self.subwidget_list[name]
 | |
| 
 | |
|     def page(self, name):
 | |
|         return self.subwidget(name)
 | |
| 
 | |
|     def pages(self):
 | |
|         # Can't call subwidgets_all directly because we don't want .nbframe
 | |
|         names = self.tk.splitlist(self.tk.call(self._w, 'pages'))
 | |
|         ret = []
 | |
|         for x in names:
 | |
|             ret.append(self.subwidget(x))
 | |
|         return ret
 | |
| 
 | |
|     def raise_page(self, name):              # raise is a python keyword
 | |
|         self.tk.call(self._w, 'raise', name)
 | |
| 
 | |
|     def raised(self):
 | |
|         return self.tk.call(self._w, 'raised')
 | |
| 
 | |
| class NoteBookFrame(TixWidget):
 | |
|     # FIXME: This is dangerous to expose to be called on its own.
 | |
|     pass
 | |
| 
 | |
| class OptionMenu(TixWidget):
 | |
|     """OptionMenu - creates a menu button of options.
 | |
| 
 | |
|     Subwidget       Class
 | |
|     ---------       -----
 | |
|     menubutton      Menubutton
 | |
|     menu            Menu"""
 | |
| 
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixOptionMenu', ['options'], cnf, kw)
 | |
|         self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
 | |
|         self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
 | |
| 
 | |
|     def add_command(self, name, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'add', 'command', name, *self._options(cnf, kw))
 | |
| 
 | |
|     def add_separator(self, name, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'add', 'separator', name, *self._options(cnf, kw))
 | |
| 
 | |
|     def delete(self, name):
 | |
|         self.tk.call(self._w, 'delete', name)
 | |
| 
 | |
|     def disable(self, name):
 | |
|         self.tk.call(self._w, 'disable', name)
 | |
| 
 | |
|     def enable(self, name):
 | |
|         self.tk.call(self._w, 'enable', name)
 | |
| 
 | |
| class PanedWindow(TixWidget):
 | |
|     """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 with the add method."""
 | |
| 
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixPanedWindow', ['orientation', 'options'], cnf, kw)
 | |
| 
 | |
|     # add delete forget panecget paneconfigure panes setsize
 | |
|     def add(self, name, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
 | |
|         self.subwidget_list[name] = TixSubWidget(self, name,
 | |
|                                                  check_intermediate=0)
 | |
|         return self.subwidget_list[name]
 | |
| 
 | |
|     def delete(self, name):
 | |
|         self.tk.call(self._w, 'delete', name)
 | |
|         self.subwidget_list[name].destroy()
 | |
|         del self.subwidget_list[name]
 | |
| 
 | |
|     def forget(self, name):
 | |
|         self.tk.call(self._w, 'forget', name)
 | |
| 
 | |
|     def panecget(self,  entry, opt):
 | |
|         return self.tk.call(self._w, 'panecget', entry, opt)
 | |
| 
 | |
|     def paneconfigure(self, entry, cnf={}, **kw):
 | |
|         if cnf is None:
 | |
|             return self._getconfigure(self._w, 'paneconfigure', entry)
 | |
|         self.tk.call(self._w, 'paneconfigure', entry, *self._options(cnf, kw))
 | |
| 
 | |
|     def panes(self):
 | |
|         names = self.tk.splitlist(self.tk.call(self._w, 'panes'))
 | |
|         return [self.subwidget(x) for x in names]
 | |
| 
 | |
| class PopupMenu(TixWidget):
 | |
|     """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
 | |
|     ----------       -----
 | |
|     menubutton       Menubutton
 | |
|     menu       Menu"""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixShell
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixPopupMenu', ['options'], cnf, kw)
 | |
|         self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
 | |
|         self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
 | |
| 
 | |
|     def bind_widget(self, widget):
 | |
|         self.tk.call(self._w, 'bind', widget._w)
 | |
| 
 | |
|     def unbind_widget(self, widget):
 | |
|         self.tk.call(self._w, 'unbind', widget._w)
 | |
| 
 | |
|     def post_widget(self, widget, x, y):
 | |
|         self.tk.call(self._w, 'post', widget._w, x, y)
 | |
| 
 | |
| class ResizeHandle(TixWidget):
 | |
|     """Internal widget to draw resize handles on Scrolled widgets."""
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         # There seems to be a Tix bug rejecting the configure method
 | |
|         # Let's try making the flags -static
 | |
|         flags = ['options', 'command', 'cursorfg', 'cursorbg',
 | |
|                  'handlesize', 'hintcolor', 'hintwidth',
 | |
|                  'x', 'y']
 | |
|         # In fact, x y height width are configurable
 | |
|         TixWidget.__init__(self, master, 'tixResizeHandle',
 | |
|                            flags, cnf, kw)
 | |
| 
 | |
|     def attach_widget(self, widget):
 | |
|         self.tk.call(self._w, 'attachwidget', widget._w)
 | |
| 
 | |
|     def detach_widget(self, widget):
 | |
|         self.tk.call(self._w, 'detachwidget', widget._w)
 | |
| 
 | |
|     def hide(self, widget):
 | |
|         self.tk.call(self._w, 'hide', widget._w)
 | |
| 
 | |
|     def show(self, widget):
 | |
|         self.tk.call(self._w, 'show', widget._w)
 | |
| 
 | |
| class ScrolledHList(TixWidget):
 | |
|     """ScrolledHList - HList with automatic scrollbars."""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixScrolledWidget
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixScrolledHList', ['options'],
 | |
|                            cnf, kw)
 | |
|         self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
 | |
|         self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
 | |
|         self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 | |
| 
 | |
| class ScrolledListBox(TixWidget):
 | |
|     """ScrolledListBox - Listbox with automatic scrollbars."""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixScrolledWidget
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixScrolledListBox', ['options'], cnf, kw)
 | |
|         self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
 | |
|         self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
 | |
|         self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 | |
| 
 | |
| class ScrolledText(TixWidget):
 | |
|     """ScrolledText - Text with automatic scrollbars."""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixScrolledWidget
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixScrolledText', ['options'], cnf, kw)
 | |
|         self.subwidget_list['text'] = _dummyText(self, 'text')
 | |
|         self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
 | |
|         self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 | |
| 
 | |
| class ScrolledTList(TixWidget):
 | |
|     """ScrolledTList - TList with automatic scrollbars."""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixScrolledWidget
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixScrolledTList', ['options'],
 | |
|                            cnf, kw)
 | |
|         self.subwidget_list['tlist'] = _dummyTList(self, 'tlist')
 | |
|         self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
 | |
|         self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 | |
| 
 | |
| class ScrolledWindow(TixWidget):
 | |
|     """ScrolledWindow - Window with automatic scrollbars."""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixScrolledWidget
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixScrolledWindow', ['options'], cnf, kw)
 | |
|         self.subwidget_list['window'] = _dummyFrame(self, 'window')
 | |
|         self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
 | |
|         self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 | |
| 
 | |
| class Select(TixWidget):
 | |
|     """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 using the add method."""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixLabelWidget
 | |
|     def __init__(self, master, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixSelect',
 | |
|                            ['allowzero', 'radio', 'orientation', 'labelside',
 | |
|                             'options'],
 | |
|                            cnf, kw)
 | |
|         self.subwidget_list['label'] = _dummyLabel(self, 'label')
 | |
| 
 | |
|     def add(self, name, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
 | |
|         self.subwidget_list[name] = _dummyButton(self, name)
 | |
|         return self.subwidget_list[name]
 | |
| 
 | |
|     def invoke(self, name):
 | |
|         self.tk.call(self._w, 'invoke', name)
 | |
| 
 | |
| class Shell(TixWidget):
 | |
|     """Toplevel window.
 | |
| 
 | |
|     Subwidgets - None"""
 | |
| 
 | |
|     def __init__ (self,master=None,cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixShell', ['options', 'title'], cnf, kw)
 | |
| 
 | |
| class DialogShell(TixWidget):
 | |
|     """Toplevel window, with popup popdown and center methods.
 | |
|     It tells the window manager that it is a dialog window and should be
 | |
|     treated specially. The exact treatment depends on the treatment of
 | |
|     the window manager.
 | |
| 
 | |
|     Subwidgets - None"""
 | |
| 
 | |
|     # FIXME: It should inherit from  Shell
 | |
|     def __init__ (self,master=None,cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master,
 | |
|                            'tixDialogShell',
 | |
|                            ['options', 'title', 'mapped',
 | |
|                             'minheight', 'minwidth',
 | |
|                             'parent', 'transient'], cnf, kw)
 | |
| 
 | |
|     def popdown(self):
 | |
|         self.tk.call(self._w, 'popdown')
 | |
| 
 | |
|     def popup(self):
 | |
|         self.tk.call(self._w, 'popup')
 | |
| 
 | |
|     def center(self):
 | |
|         self.tk.call(self._w, 'center')
 | |
| 
 | |
| class StdButtonBox(TixWidget):
 | |
|     """StdButtonBox - Standard Button Box (OK, Apply, Cancel and Help) """
 | |
| 
 | |
|     def __init__(self, master=None, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixStdButtonBox',
 | |
|                            ['orientation', 'options'], cnf, kw)
 | |
|         self.subwidget_list['ok'] = _dummyButton(self, 'ok')
 | |
|         self.subwidget_list['apply'] = _dummyButton(self, 'apply')
 | |
|         self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
 | |
|         self.subwidget_list['help'] = _dummyButton(self, 'help')
 | |
| 
 | |
|     def invoke(self, name):
 | |
|         if name in self.subwidget_list:
 | |
|             self.tk.call(self._w, 'invoke', name)
 | |
| 
 | |
| class TList(TixWidget, XView, YView):
 | |
|     """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"""
 | |
| 
 | |
|     def __init__ (self,master=None,cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixTList', ['options'], cnf, kw)
 | |
| 
 | |
|     def active_set(self, index):
 | |
|         self.tk.call(self._w, 'active', 'set', index)
 | |
| 
 | |
|     def active_clear(self):
 | |
|         self.tk.call(self._w, 'active', 'clear')
 | |
| 
 | |
|     def anchor_set(self, index):
 | |
|         self.tk.call(self._w, 'anchor', 'set', index)
 | |
| 
 | |
|     def anchor_clear(self):
 | |
|         self.tk.call(self._w, 'anchor', 'clear')
 | |
| 
 | |
|     def delete(self, from_, to=None):
 | |
|         self.tk.call(self._w, 'delete', from_, to)
 | |
| 
 | |
|     def dragsite_set(self, index):
 | |
|         self.tk.call(self._w, 'dragsite', 'set', index)
 | |
| 
 | |
|     def dragsite_clear(self):
 | |
|         self.tk.call(self._w, 'dragsite', 'clear')
 | |
| 
 | |
|     def dropsite_set(self, index):
 | |
|         self.tk.call(self._w, 'dropsite', 'set', index)
 | |
| 
 | |
|     def dropsite_clear(self):
 | |
|         self.tk.call(self._w, 'dropsite', 'clear')
 | |
| 
 | |
|     def insert(self, index, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'insert', index, *self._options(cnf, kw))
 | |
| 
 | |
|     def info_active(self):
 | |
|         return self.tk.call(self._w, 'info', 'active')
 | |
| 
 | |
|     def info_anchor(self):
 | |
|         return self.tk.call(self._w, 'info', 'anchor')
 | |
| 
 | |
|     def info_down(self, index):
 | |
|         return self.tk.call(self._w, 'info', 'down', index)
 | |
| 
 | |
|     def info_left(self, index):
 | |
|         return self.tk.call(self._w, 'info', 'left', index)
 | |
| 
 | |
|     def info_right(self, index):
 | |
|         return self.tk.call(self._w, 'info', 'right', index)
 | |
| 
 | |
|     def info_selection(self):
 | |
|         c = self.tk.call(self._w, 'info', 'selection')
 | |
|         return self.tk.splitlist(c)
 | |
| 
 | |
|     def info_size(self):
 | |
|         return self.tk.call(self._w, 'info', 'size')
 | |
| 
 | |
|     def info_up(self, index):
 | |
|         return self.tk.call(self._w, 'info', 'up', index)
 | |
| 
 | |
|     def nearest(self, x, y):
 | |
|         return self.tk.call(self._w, 'nearest', x, y)
 | |
| 
 | |
|     def see(self, index):
 | |
|         self.tk.call(self._w, 'see', index)
 | |
| 
 | |
|     def selection_clear(self, cnf={}, **kw):
 | |
|         self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw))
 | |
| 
 | |
|     def selection_includes(self, index):
 | |
|         return self.tk.call(self._w, 'selection', 'includes', index)
 | |
| 
 | |
|     def selection_set(self, first, last=None):
 | |
|         self.tk.call(self._w, 'selection', 'set', first, last)
 | |
| 
 | |
| class Tree(TixWidget):
 | |
|     """Tree - The tixTree widget can be used to display hierarchical
 | |
|     data in a tree form. The user can adjust
 | |
|     the view of the tree by opening or closing parts of the tree."""
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixScrolledWidget
 | |
|     def __init__(self, master=None, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixTree',
 | |
|                            ['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):
 | |
|         '''This command calls the setmode method for all the entries in this
 | |
|      Tree widget: if an entry has no child entries, its mode is set to
 | |
|      none. Otherwise, if the entry has any hidden child entries, its mode is
 | |
|      set to open; otherwise its mode is set to close.'''
 | |
|         self.tk.call(self._w, 'autosetmode')
 | |
| 
 | |
|     def close(self, entrypath):
 | |
|         '''Close the entry given by entryPath if its mode is close.'''
 | |
|         self.tk.call(self._w, 'close', entrypath)
 | |
| 
 | |
|     def getmode(self, entrypath):
 | |
|         '''Returns the current mode of the entry given by entryPath.'''
 | |
|         return self.tk.call(self._w, 'getmode', entrypath)
 | |
| 
 | |
|     def open(self, entrypath):
 | |
|         '''Open the entry given by entryPath if its mode is open.'''
 | |
|         self.tk.call(self._w, 'open', entrypath)
 | |
| 
 | |
|     def setmode(self, entrypath, mode='none'):
 | |
|         '''This command is used to indicate whether the entry given by
 | |
|      entryPath has children entries and whether the children are visible. mode
 | |
|      must be one of open, close or none. If mode is set to open, a (+)
 | |
|      indicator is drawn next the entry. If mode is set to close, a (-)
 | |
|      indicator is drawn next the entry. If mode is set to none, no
 | |
|      indicators will be drawn for this entry. The default mode is none. The
 | |
|      open mode indicates the entry has hidden children and this entry can be
 | |
|      opened by the user. The close mode indicates that all the children of the
 | |
|      entry are now visible and the entry can be closed by the user.'''
 | |
|         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.
 | |
|     """
 | |
|     # FIXME: It should inherit -superclass tixTree
 | |
|     def __init__(self, master=None, cnf={}, **kw):
 | |
|         TixWidget.__init__(self, master, 'tixCheckList',
 | |
|                            ['options', 'radio'], 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):
 | |
|         '''This command calls the setmode method for all the entries in this
 | |
|      Tree widget: if an entry has no child entries, its mode is set to
 | |
|      none. Otherwise, if the entry has any hidden child entries, its mode is
 | |
|      set to open; otherwise its mode is set to close.'''
 | |
|         self.tk.call(self._w, 'autosetmode')
 | |
| 
 | |
|     def close(self, entrypath):
 | |
|         '''Close the entry given by entryPath if its mode is close.'''
 | |
|         self.tk.call(self._w, 'close', entrypath)
 | |
| 
 | |
|     def getmode(self, entrypath):
 | |
|         '''Returns the current mode of the entry given by entryPath.'''
 | |
|         return self.tk.call(self._w, 'getmode', entrypath)
 | |
| 
 | |
|     def open(self, entrypath):
 | |
|         '''Open the entry given by entryPath if its mode is open.'''
 | |
|         self.tk.call(self._w, 'open', entrypath)
 | |
| 
 | |
|     def getselection(self, mode='on'):
 | |
|         '''Returns a list of items whose status matches status. If status is
 | |
|      not specified, the list of items in the "on" status will be returned.
 | |
|      Mode can be on, off, default'''
 | |
|         return self.tk.splitlist(self.tk.call(self._w, 'getselection', mode))
 | |
| 
 | |
|     def getstatus(self, entrypath):
 | |
|         '''Returns the current status of entryPath.'''
 | |
|         return self.tk.call(self._w, 'getstatus', entrypath)
 | |
| 
 | |
|     def setstatus(self, entrypath, mode='on'):
 | |
|         '''Sets the status of entryPath to be status. A bitmap will be
 | |
|      displayed next to the entry its status is on, off or default.'''
 | |
|         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.       ###
 | |
| ###########################################################################
 | |
| 
 | |
| class _dummyButton(Button, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyCheckbutton(Checkbutton, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyEntry(Entry, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyFrame(Frame, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyLabel(Label, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyListbox(Listbox, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyMenu(Menu, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyMenubutton(Menubutton, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyScrollbar(Scrollbar, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyText(Text, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyScrolledListBox(ScrolledListBox, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
|         self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
 | |
|         self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
 | |
|         self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
 | |
| 
 | |
| 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)
 | |
| 
 | |
| class _dummyComboBox(ComboBox, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, ['fancy',destroy_physically])
 | |
|         self.subwidget_list['label'] = _dummyLabel(self, 'label')
 | |
|         self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
 | |
|         self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
 | |
| 
 | |
|         self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
 | |
|                                                                 'slistbox')
 | |
|         try:
 | |
|             self.subwidget_list['tick'] = _dummyButton(self, 'tick')
 | |
|             #cross Button : present if created with the fancy option
 | |
|             self.subwidget_list['cross'] = _dummyButton(self, 'cross')
 | |
|         except TypeError:
 | |
|             # unavailable when -fancy not specified
 | |
|             pass
 | |
| 
 | |
| class _dummyDirList(DirList, 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 _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)
 | |
|         self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
 | |
|         self.subwidget_list['ok'] = _dummyButton(self, 'ok')
 | |
|         self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
 | |
|         self.subwidget_list['types'] = _dummyComboBox(self, 'types')
 | |
|         self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
 | |
|         self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
 | |
|         self.subwidget_list['file'] = _dummyComboBox(self, 'file')
 | |
|         self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
 | |
| 
 | |
| class _dummyFileSelectBox(FileSelectBox, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
|         self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
 | |
|         self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
 | |
|         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)
 | |
|         self.subwidget_list['ok'] = _dummyButton(self, 'ok')
 | |
|         self.subwidget_list['apply'] = _dummyButton(self, 'apply')
 | |
|         self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
 | |
|         self.subwidget_list['help'] = _dummyButton(self, 'help')
 | |
| 
 | |
| class _dummyNoteBookFrame(NoteBookFrame, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=0):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| class _dummyPanedWindow(PanedWindow, TixSubWidget):
 | |
|     def __init__(self, master, name, destroy_physically=1):
 | |
|         TixSubWidget.__init__(self, master, name, destroy_physically)
 | |
| 
 | |
| ########################
 | |
| ### Utility Routines ###
 | |
| ########################
 | |
| 
 | |
| #mike Should tixDestroy be exposed as a wrapper? - but not for widgets.
 | |
| 
 | |
| def OptionName(widget):
 | |
|     '''Returns the qualified path name for the widget. Normally used to set
 | |
|     default options for subwidgets. See tixwidgets.py'''
 | |
|     return widget.tk.call('tixOptionName', widget._w)
 | |
| 
 | |
| # Called with a dictionary argument of the form
 | |
| # {'*.c':'C source files', '*.txt':'Text Files', '*':'All files'}
 | |
| # returns a string which can be used to configure the fsbox file types
 | |
| # in an ExFileSelectBox. i.e.,
 | |
| # '{{*} {* - All files}} {{*.c} {*.c - C source files}} {{*.txt} {*.txt - Text Files}}'
 | |
| def FileTypeList(dict):
 | |
|     s = ''
 | |
|     for type in dict.keys():
 | |
|         s = s + '{{' + type + '} {' + type + ' - ' + dict[type] + '}} '
 | |
|     return s
 | |
| 
 | |
| # Still to be done:
 | |
| # tixIconView
 | |
| 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.
 | |
|     """
 | |
|     # FIXME: It should inherit -superclass tixScrolledWidget
 | |
|     pass
 | |
| 
 | |
| 
 | |
| class Grid(TixWidget, XView, YView):
 | |
|     '''The Tix Grid command creates a new window  and makes it into a
 | |
|     tixGrid widget. Additional options, may be specified on the command
 | |
|     line or in the option database to configure aspects such as its cursor
 | |
|     and relief.
 | |
| 
 | |
|     A Grid widget displays its contents in a two dimensional grid of cells.
 | |
|     Each cell may contain one Tix display item, which may be in text,
 | |
|     graphics or other formats. See the DisplayStyle class for more information
 | |
|     about Tix display items. Individual cells, or groups of cells, can be
 | |
|     formatted with a wide range of attributes, such as its color, relief and
 | |
|     border.
 | |
| 
 | |
|     Subwidgets - None'''
 | |
|     # valid specific resources as of Tk 8.4
 | |
|     # editdonecmd, editnotifycmd, floatingcols, floatingrows, formatcmd,
 | |
|     # highlightbackground, highlightcolor, leftmargin, itemtype, selectmode,
 | |
|     # selectunit, topmargin,
 | |
|     def __init__(self, master=None, cnf={}, **kw):
 | |
|         static= []
 | |
|         self.cnf= cnf
 | |
|         TixWidget.__init__(self, master, 'tixGrid', static, cnf, kw)
 | |
| 
 | |
|     # valid options as of Tk 8.4
 | |
|     # anchor, bdtype, cget, configure, delete, dragsite, dropsite, entrycget,
 | |
|     # edit, entryconfigure, format, geometryinfo, info, index, move, nearest,
 | |
|     # selection, set, size, unset, xview, yview
 | |
|     def anchor_clear(self):
 | |
|         """Removes the selection anchor."""
 | |
|         self.tk.call(self, 'anchor', 'clear')
 | |
| 
 | |
|     def anchor_get(self):
 | |
|         "Get the (x,y) coordinate of the current anchor cell"
 | |
|         return self._getints(self.tk.call(self, 'anchor', 'get'))
 | |
| 
 | |
|     def anchor_set(self, x, y):
 | |
|         """Set the selection anchor to the cell at (x, y)."""
 | |
|         self.tk.call(self, 'anchor', 'set', x, y)
 | |
| 
 | |
|     def delete_row(self, from_, to=None):
 | |
|         """Delete rows between from_ and to inclusive.
 | |
|         If to is not provided,  delete only row at from_"""
 | |
|         if to is None:
 | |
|             self.tk.call(self, 'delete', 'row', from_)
 | |
|         else:
 | |
|             self.tk.call(self, 'delete', 'row', from_, to)
 | |
| 
 | |
|     def delete_column(self, from_, to=None):
 | |
|         """Delete columns between from_ and to inclusive.
 | |
|         If to is not provided,  delete only column at from_"""
 | |
|         if to is None:
 | |
|             self.tk.call(self, 'delete', 'column', from_)
 | |
|         else:
 | |
|             self.tk.call(self, 'delete', 'column', from_, to)
 | |
| 
 | |
|     def edit_apply(self):
 | |
|         """If any cell is being edited, de-highlight the cell  and  applies
 | |
|         the changes."""
 | |
|         self.tk.call(self, 'edit', 'apply')
 | |
| 
 | |
|     def edit_set(self, x, y):
 | |
|         """Highlights  the  cell  at  (x, y) for editing, if the -editnotify
 | |
|         command returns True for this cell."""
 | |
|         self.tk.call(self, 'edit', 'set', x, y)
 | |
| 
 | |
|     def entrycget(self, x, y, option):
 | |
|         "Get the option value for cell at (x,y)"
 | |
|         if option and option[0] != '-':
 | |
|             option = '-' + option
 | |
|         return self.tk.call(self, 'entrycget', x, y, option)
 | |
| 
 | |
|     def entryconfigure(self, x, y, cnf=None, **kw):
 | |
|         return self._configure(('entryconfigure', x, y), cnf, kw)
 | |
| 
 | |
|     # def format
 | |
|     # def index
 | |
| 
 | |
|     def info_exists(self, x, y):
 | |
|         "Return True if display item exists at (x,y)"
 | |
|         return self._getboolean(self.tk.call(self, 'info', 'exists', x, y))
 | |
| 
 | |
|     def info_bbox(self, x, y):
 | |
|         # This seems to always return '', at least for 'text' displayitems
 | |
|         return self.tk.call(self, 'info', 'bbox', x, y)
 | |
| 
 | |
|     def move_column(self, from_, to, offset):
 | |
|         """Moves the range of columns from position FROM through TO by
 | |
|         the distance indicated by OFFSET. For example, move_column(2, 4, 1)
 | |
|         moves the columns 2,3,4 to columns 3,4,5."""
 | |
|         self.tk.call(self, 'move', 'column', from_, to, offset)
 | |
| 
 | |
|     def move_row(self, from_, to, offset):
 | |
|         """Moves the range of rows from position FROM through TO by
 | |
|         the distance indicated by OFFSET.
 | |
|         For example, move_row(2, 4, 1) moves the rows 2,3,4 to rows 3,4,5."""
 | |
|         self.tk.call(self, 'move', 'row', from_, to, offset)
 | |
| 
 | |
|     def nearest(self, x, y):
 | |
|         "Return coordinate of cell nearest pixel coordinate (x,y)"
 | |
|         return self._getints(self.tk.call(self, 'nearest', x, y))
 | |
| 
 | |
|     # def selection adjust
 | |
|     # def selection clear
 | |
|     # def selection includes
 | |
|     # def selection set
 | |
|     # def selection toggle
 | |
| 
 | |
|     def set(self, x, y, itemtype=None, **kw):
 | |
|         args= self._options(self.cnf, kw)
 | |
|         if itemtype is not None:
 | |
|             args= ('-itemtype', itemtype) + args
 | |
|         self.tk.call(self, 'set', x, y, *args)
 | |
| 
 | |
|     def size_column(self, index, **kw):
 | |
|         """Queries or sets the size of the column given by
 | |
|         INDEX.  INDEX may be any non-negative
 | |
|         integer that gives the position of a given column.
 | |
|         INDEX can also be the string "default"; in this case, this command
 | |
|         queries or sets the default size of all columns.
 | |
|         When no option-value pair is given, this command returns a tuple
 | |
|         containing the current size setting of the given column.  When
 | |
|         option-value pairs are given, the corresponding options of the
 | |
|         size setting of the given column are changed. Options may be one
 | |
|         of the following:
 | |
|               pad0 pixels
 | |
|                      Specifies the paddings to the left of a column.
 | |
|               pad1 pixels
 | |
|                      Specifies the paddings to the right of a column.
 | |
|               size val
 | |
|                      Specifies the width of a column.  Val may be:
 | |
|                      "auto" -- the width of the column is set to the
 | |
|                      width of the widest cell in the column;
 | |
|                      a valid Tk screen distance unit;
 | |
|                      or a real number following by the word chars
 | |
|                      (e.g. 3.4chars) that sets the width of the column to the
 | |
|                      given number of characters."""
 | |
|         return self.tk.splitlist(self.tk.call(self._w, 'size', 'column', index,
 | |
|                              *self._options({}, kw)))
 | |
| 
 | |
|     def size_row(self, index, **kw):
 | |
|         """Queries or sets the size of the row given by
 | |
|         INDEX. INDEX may be any non-negative
 | |
|         integer that gives the position of a given row .
 | |
|         INDEX can also be the string "default"; in this case, this command
 | |
|         queries or sets the default size of all rows.
 | |
|         When no option-value pair is given, this command returns a list con-
 | |
|         taining the current size setting of the given row . When option-value
 | |
|         pairs are given, the corresponding options of the size setting of the
 | |
|         given row are changed. Options may be one of the following:
 | |
|               pad0 pixels
 | |
|                      Specifies the paddings to the top of a row.
 | |
|               pad1 pixels
 | |
|                      Specifies the paddings to the bottom of a row.
 | |
|               size val
 | |
|                      Specifies the height of a row.  Val may be:
 | |
|                      "auto" -- the height of the row is set to the
 | |
|                      height of the highest cell in the row;
 | |
|                      a valid Tk screen distance unit;
 | |
|                      or a real number following by the word chars
 | |
|                      (e.g. 3.4chars) that sets the height of the row to the
 | |
|                      given number of characters."""
 | |
|         return self.tk.splitlist(self.tk.call(
 | |
|                     self, 'size', 'row', index, *self._options({}, kw)))
 | |
| 
 | |
|     def unset(self, x, y):
 | |
|         """Clears the cell at (x, y) by removing its display item."""
 | |
|         self.tk.call(self._w, 'unset', x, y)
 | |
| 
 | |
| 
 | |
| class ScrolledGrid(Grid):
 | |
|     '''Scrolled Grid widgets'''
 | |
| 
 | |
|     # FIXME: It should inherit -superclass tixScrolledWidget
 | |
|     def __init__(self, master=None, cnf={}, **kw):
 | |
|         static= []
 | |
|         self.cnf= cnf
 | |
|         TixWidget.__init__(self, master, 'tixScrolledGrid', static, cnf, kw)
 |