1b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis# Tix.py -- Tix widget wrappers.
2b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis#
30c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis#       For Tix, see http://tix.sourceforge.net
4b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis#
522710823fb554a796dc96c44885d7a9389426824Moshe Zadka#       - Sudhir Shenoy (sshenoy@gol.com), Dec. 1995.
6b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis#         based on an idea of Jean-Marc Lugrin (lugrin@ms.com)
7b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis#
8b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# NOTE: In order to minimize changes to Tkinter.py, some of the code here
922710823fb554a796dc96c44885d7a9389426824Moshe Zadka#       (TixWidget.__init__) has been taken from Tkinter (Widget.__init__)
1022710823fb554a796dc96c44885d7a9389426824Moshe Zadka#       and will break if there are major changes in Tkinter.
11b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis#
12b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# The Tix widgets are represented by a class hierarchy in python with proper
13b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# inheritance of base classes.
14b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis#
15b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# As a result after creating a 'w = StdButtonBox', I can write
1622710823fb554a796dc96c44885d7a9389426824Moshe Zadka#              w.ok['text'] = 'Who Cares'
1722710823fb554a796dc96c44885d7a9389426824Moshe Zadka#    or              w.ok['bg'] = w['bg']
1822710823fb554a796dc96c44885d7a9389426824Moshe Zadka# or even       w.ok.invoke()
19b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# etc.
20b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis#
21b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# Compare the demo tixwidgets.py to the original Tcl program and you will
22b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# appreciate the advantages.
23b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis#
24b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
2522ba01ea550a0a6a0bb1e2a6f2758acd46797d2bTerry Jan Reedyimport os
2622ba01ea550a0a6a0bb1e2a6f2758acd46797d2bTerry Jan Reedyimport tkinter
2714fc4270da5db43574d46d055a5f794ed33b271fGeorg Brandlfrom tkinter import *
2822ba01ea550a0a6a0bb1e2a6f2758acd46797d2bTerry Jan Reedyfrom tkinter import _cnfmerge
29b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
30b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport _tkinter # If this fails your Python may not be configured for Tk
31b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
32b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# Some more constants (for consistency with Tkinter)
33b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. LöwisWINDOW = 'window'
34b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. LöwisTEXT = 'text'
35b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. LöwisSTATUS = 'status'
36b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. LöwisIMMEDIATE = 'immediate'
37b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. LöwisIMAGE = 'image'
38b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. LöwisIMAGETEXT = 'imagetext'
39b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. LöwisBALLOON = 'balloon'
40b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. LöwisAUTO = 'auto'
41b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. LöwisACROSSTOP = 'acrosstop'
42b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
43bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo# A few useful constants for the Grid widget
44bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloASCII = 'ascii'
45bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloCELL = 'cell'
46bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloCOLUMN = 'column'
47bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloDECREASING = 'decreasing'
48bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloINCREASING = 'increasing'
49bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloINTEGER = 'integer'
50bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloMAIN = 'main'
51bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloMAX = 'max'
52bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloREAL = 'real'
53bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloROW = 'row'
54bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloS_REGION = 's-region'
55bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloX_REGION = 'x-region'
56bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme PoloY_REGION = 'y-region'
57bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
58723293cb49f479a41dc893d72c2d6502587d52cbFred Drake# Some constants used by Tkinter dooneevent()
59723293cb49f479a41dc893d72c2d6502587d52cbFred DrakeTCL_DONT_WAIT     = 1 << 1
60723293cb49f479a41dc893d72c2d6502587d52cbFred DrakeTCL_WINDOW_EVENTS = 1 << 2
61723293cb49f479a41dc893d72c2d6502587d52cbFred DrakeTCL_FILE_EVENTS   = 1 << 3
62723293cb49f479a41dc893d72c2d6502587d52cbFred DrakeTCL_TIMER_EVENTS  = 1 << 4
63723293cb49f479a41dc893d72c2d6502587d52cbFred DrakeTCL_IDLE_EVENTS   = 1 << 5
64723293cb49f479a41dc893d72c2d6502587d52cbFred DrakeTCL_ALL_EVENTS    = 0
65723293cb49f479a41dc893d72c2d6502587d52cbFred Drake
66b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# BEWARE - this is implemented by copying some code from the Widget class
67b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis#          in Tkinter (to override Widget initialization) and is therefore
68b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis#          liable to break.
69b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
70b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis# Could probably add this to Tkinter.Misc
71b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass tixCommand:
72723293cb49f479a41dc893d72c2d6502587d52cbFred Drake    """The tix commands provide access to miscellaneous  elements
73b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    of  Tix's  internal state and the Tix application context.
74723293cb49f479a41dc893d72c2d6502587d52cbFred Drake    Most of the information manipulated by these  commands pertains
75723293cb49f479a41dc893d72c2d6502587d52cbFred Drake    to  the  application  as a whole, or to a screen or
76723293cb49f479a41dc893d72c2d6502587d52cbFred Drake    display, rather than to a particular window.
77b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
78b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    This is a mixin class, assumed to be mixed to Tkinter.Tk
79b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    that supports the self.tk.call method.
80b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """
81723293cb49f479a41dc893d72c2d6502587d52cbFred Drake
82b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def tix_addbitmapdir(self, directory):
83723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        """Tix maintains a list of directories under which
84b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        the  tix_getimage  and tix_getbitmap commands will
85723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        search for image files. The standard bitmap  directory
86723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        is $TIX_LIBRARY/bitmaps. The addbitmapdir command
87723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        adds directory into this list. By  using  this
88b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        command, the  image  files  of an applications can
89b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        also be located using the tix_getimage or tix_getbitmap
90b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        command.
91b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        """
92b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        return self.tk.call('tix', 'addbitmapdir', directory)
93b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
94b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def tix_cget(self, option):
95b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        """Returns  the  current  value  of the configuration
96b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        option given by option. Option may be  any  of  the
97b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        options described in the CONFIGURATION OPTIONS section.
98b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        """
99b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        return self.tk.call('tix', 'cget', option)
100b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
101b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def tix_configure(self, cnf=None, **kw):
102723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        """Query or modify the configuration options of the Tix application
103723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        context. If no option is specified, returns a dictionary all of the
104723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        available options.  If option is specified with no value, then the
105723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        command returns a list describing the one named option (this list
106723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        will be identical to the corresponding sublist of the value
107723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        returned if no option is specified).  If one or more option-value
108723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        pairs are specified, then the command modifies the given option(s)
109723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        to have the given value(s); in this case the command returns an
110723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        empty string. Option may be any of the configuration options.
111b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        """
112723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        # Copied from Tkinter.py
113723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        if kw:
114723293cb49f479a41dc893d72c2d6502587d52cbFred Drake            cnf = _cnfmerge((cnf, kw))
115723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        elif cnf:
116723293cb49f479a41dc893d72c2d6502587d52cbFred Drake            cnf = _cnfmerge(cnf)
117723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        if cnf is None:
118848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka            return self._getconfigure('tix', 'configure')
119975fce37883899a55bbcdaa6300c5c6ffe9d3db2Serhiy Storchaka        if isinstance(cnf, str):
120848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka            return self._getconfigure1('tix', 'configure', '-'+cnf)
121723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        return self.tk.call(('tix', 'configure') + self._options(cnf))
122b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
123b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def tix_filedialog(self, dlgclass=None):
124723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        """Returns the file selection dialog that may be shared among
125723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        different calls from this application.  This command will create a
126723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        file selection dialog widget when it is called the first time. This
127723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        dialog will be returned by all subsequent calls to tix_filedialog.
128723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        An optional dlgclass parameter can be passed to specified what type
129723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        of file selection dialog widget is desired. Possible options are
130723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        tix FileSelectDialog or tixExFileSelectDialog.
131b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        """
132b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        if dlgclass is not None:
133b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            return self.tk.call('tix', 'filedialog', dlgclass)
134b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        else:
135b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            return self.tk.call('tix', 'filedialog')
136b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
137b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def tix_getbitmap(self, name):
138723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        """Locates a bitmap file of the name name.xpm or name in one of the
139723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        bitmap directories (see the tix_addbitmapdir command above).  By
140723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        using tix_getbitmap, you can avoid hard coding the pathnames of the
141723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        bitmap files in your application. When successful, it returns the
142723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        complete pathname of the bitmap file, prefixed with the character
143723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        '@'.  The returned value can be used to configure the -bitmap
144723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        option of the TK and Tix widgets.
145b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        """
146b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        return self.tk.call('tix', 'getbitmap', name)
147b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
148b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def tix_getimage(self, name):
149723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        """Locates an image file of the name name.xpm, name.xbm or name.ppm
150723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        in one of the bitmap directories (see the addbitmapdir command
151723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        above). If more than one file with the same name (but different
152723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        extensions) exist, then the image type is chosen according to the
153723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        depth of the X display: xbm images are chosen on monochrome
154723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        displays and color images are chosen on color displays. By using
15542da663e6fe7ecbb89b17d596c76812a91bb99a4Ezio Melotti        tix_ getimage, you can avoid hard coding the pathnames of the
156723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        image files in your application. When successful, this command
157723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        returns the name of the newly created image, which can be used to
158723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        configure the -image option of the Tk and Tix widgets.
159b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        """
160b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        return self.tk.call('tix', 'getimage', name)
161b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
162b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def tix_option_get(self, name):
16313925008dc11f2a235627dc8c0440c0ce99171d9Ezio Melotti        """Gets  the options  maintained  by  the  Tix
164723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        scheme mechanism. Available options include:
165b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
166b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            active_bg       active_fg      bg
167b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            bold_font       dark1_bg       dark1_fg
168b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            dark2_bg        dark2_fg       disabled_fg
1690c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            fg              fixed_font     font
170b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            inactive_bg     inactive_fg    input1_bg
171b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            input2_bg       italic_font    light1_bg
172b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            light1_fg       light2_bg      light2_fg
173b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            menu_font       output1_bg     output2_bg
174b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            select_bg       select_fg      selector
175b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            """
176b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        # could use self.tk.globalgetvar('tixOption', name)
177b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        return self.tk.call('tix', 'option', 'get', name)
178b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
179b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def tix_resetoptions(self, newScheme, newFontSet, newScmPrio=None):
180723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        """Resets the scheme and fontset of the Tix application to
181723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        newScheme and newFontSet, respectively.  This affects only those
182723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        widgets created after this call. Therefore, it is best to call the
183723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        resetoptions command before the creation of any widgets in a Tix
184723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        application.
185723293cb49f479a41dc893d72c2d6502587d52cbFred Drake
186723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        The optional parameter newScmPrio can be given to reset the
187723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        priority level of the Tk options set by the Tix schemes.
188723293cb49f479a41dc893d72c2d6502587d52cbFred Drake
189723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        Because of the way Tk handles the X option database, after Tix has
190723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        been has imported and inited, it is not possible to reset the color
191723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        schemes and font sets using the tix config command.  Instead, the
192723293cb49f479a41dc893d72c2d6502587d52cbFred Drake        tix_resetoptions command must be used.
193b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        """
194b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        if newScmPrio is not None:
195b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            return self.tk.call('tix', 'resetoptions', newScheme, newFontSet, newScmPrio)
196b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        else:
197b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis            return self.tk.call('tix', 'resetoptions', newScheme, newFontSet)
198b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
19914fc4270da5db43574d46d055a5f794ed33b271fGeorg Brandlclass Tk(tkinter.Tk, tixCommand):
200b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """Toplevel widget of Tix which represents mostly the main window
201b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    of an application. It has an associated Tcl interpreter."""
202b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def __init__(self, screenName=None, baseName=None, className='Tix'):
20314fc4270da5db43574d46d055a5f794ed33b271fGeorg Brandl        tkinter.Tk.__init__(self, screenName, baseName, className)
20422710823fb554a796dc96c44885d7a9389426824Moshe Zadka        tixlib = os.environ.get('TIX_LIBRARY')
205b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        self.tk.eval('global auto_path; lappend auto_path [file dir [info nameof]]')
20622710823fb554a796dc96c44885d7a9389426824Moshe Zadka        if tixlib is not None:
20722710823fb554a796dc96c44885d7a9389426824Moshe Zadka            self.tk.eval('global auto_path; lappend auto_path {%s}' % tixlib)
20822710823fb554a796dc96c44885d7a9389426824Moshe Zadka            self.tk.eval('global tcl_pkgPath; lappend tcl_pkgPath {%s}' % tixlib)
209b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis        # Load Tix - this should work dynamically or statically
210d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz        # If it's static, tcl/tix8.1/pkgIndex.tcl should have
2110c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        #               'load {} Tix'
212d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz        # If it's dynamic under Unix, tcl/tix8.1/pkgIndex.tcl should have
2130c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        #               'load libtix8.1.8.3.so Tix'
21422710823fb554a796dc96c44885d7a9389426824Moshe Zadka        self.tk.eval('package require Tix')
215b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
216d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    def destroy(self):
2176a7b3a77b4b2be0badd24ee5f0fdbaa2e0e79c3dSerhiy Storchaka        # For safety, remove the delete_window binding before destroy
218d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz        self.protocol("WM_DELETE_WINDOW", "")
21914fc4270da5db43574d46d055a5f794ed33b271fGeorg Brandl        tkinter.Tk.destroy(self)
220b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
221b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# The Tix 'tixForm' geometry manager
222b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass Form:
223b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """The Tix Form geometry manager
224b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
225b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    Widgets can be arranged by specifying attachments to other widgets.
226b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    See Tix documentation for complete details"""
227b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
228b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def config(self, cnf={}, **kw):
229ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call('tixForm', self._w, *self._options(cnf, kw))
230b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
231b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    form = config
232b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
233b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __setitem__(self, key, value):
23449fa2bdaa124e99c62ea901c8151eaa064f79c6dGuido van Rossum        Form.form(self, {key: value})
235b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
236b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def check(self):
237b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis        return self.tk.call('tixForm', 'check', self._w)
238b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
239b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def forget(self):
240b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis        self.tk.call('tixForm', 'forget', self._w)
241b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
242b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def grid(self, xsize=0, ysize=0):
243b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis        if (not xsize) and (not ysize):
244b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis            x = self.tk.call('tixForm', 'grid', self._w)
245b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis            y = self.tk.splitlist(x)
246b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis            z = ()
247b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis            for x in y:
248b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis                z = z + (self.tk.getint(x),)
249b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis            return z
250468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        return self.tk.call('tixForm', 'grid', self._w, xsize, ysize)
251b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
252b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info(self, option=None):
253b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis        if not option:
254b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis            return self.tk.call('tixForm', 'info', self._w)
255b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis        if option[0] != '-':
256b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis            option = '-' + option
257b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis        return self.tk.call('tixForm', 'info', self._w, option)
258b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
259b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def slaves(self):
260022f049fededad8a2e8e902effd42eca19fbf2b1Alexander Belopolsky        return [self._nametowidget(x) for x in
261022f049fededad8a2e8e902effd42eca19fbf2b1Alexander Belopolsky                self.tk.splitlist(
262b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis                       self.tk.call(
263022f049fededad8a2e8e902effd42eca19fbf2b1Alexander Belopolsky                       'tixForm', 'slaves', self._w))]
264b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
265b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
2660c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
26714fc4270da5db43574d46d055a5f794ed33b271fGeorg Brandltkinter.Widget.__bases__ = tkinter.Widget.__bases__ + (Form,)
268b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
26914fc4270da5db43574d46d055a5f794ed33b271fGeorg Brandlclass TixWidget(tkinter.Widget):
270b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """A TixWidget class is used to package all (or most) Tix widgets.
271b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
272b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    Widget initialization is extended in two ways:
273b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis       1) It is possible to give a list of options which must be part of
27422710823fb554a796dc96c44885d7a9389426824Moshe Zadka       the creation command (so called Tix 'static' options). These cannot be
27522710823fb554a796dc96c44885d7a9389426824Moshe Zadka       given as a 'config' command later.
27622710823fb554a796dc96c44885d7a9389426824Moshe Zadka       2) It is possible to give the name of an existing TK widget. These are
27722710823fb554a796dc96c44885d7a9389426824Moshe Zadka       child widgets created automatically by a Tix mega-widget. The Tk call
27822710823fb554a796dc96c44885d7a9389426824Moshe Zadka       to create these widgets is therefore bypassed in TixWidget.__init__
279b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
280b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    Both options are for use by subclasses only.
281b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """
282b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__ (self, master=None, widgetName=None,
28322710823fb554a796dc96c44885d7a9389426824Moshe Zadka                static_options=None, cnf={}, kw={}):
2840c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # Merge keywords and dictionary arguments
2850c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if kw:
28622710823fb554a796dc96c44885d7a9389426824Moshe Zadka            cnf = _cnfmerge((cnf, kw))
2870c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        else:
2880c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            cnf = _cnfmerge(cnf)
2890c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
2900c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # Move static options into extra. static_options must be
2910c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # a list of keywords (or None).
2920c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        extra=()
293f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
294f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        # 'options' is always a static option
2950c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if static_options:
296f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz            static_options.append('options')
297f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        else:
298f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz            static_options = ['options']
299ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger
30021027e608a2b1b008231105d6eaf0a04078d395fHirokazu Yamamoto        for k,v in list(cnf.items()):
301f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz            if k in static_options:
302f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                extra = extra + ('-' + k, v)
303f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                del cnf[k]
3040c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
3050c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.widgetName = widgetName
3060c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        Widget._setup(self, master, cnf)
3070c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
3080c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # If widgetName is None, this is a dummy creation call where the
3090c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # corresponding Tk widget has already been created by Tix
3100c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if widgetName:
311ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger            self.tk.call(widgetName, self._w, *extra)
3120c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
3130c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # Non-static options - to be done via a 'config' command
3140c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if cnf:
3150c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            Widget.config(self, cnf)
3160c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
3170c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # Dictionary to hold subwidget names for easier access. We can't
3180c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # use the children list because the public Tix names may not be the
3190c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # same as the pathname component
3200c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list = {}
321b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
322b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    # We set up an attribute access function so that it is possible to
323b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    # do w.ok['text'] = 'Hello' rather than w.subwidget('ok')['text'] = 'Hello'
324b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    # when w is a StdButtonBox.
325b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    # We can even do w.ok.invoke() because w.ok is subclassed from the
326b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    # Button class if you go through the proper constructors
327b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __getattr__(self, name):
328e014a13f03abc0111591565fc0b669dd1cff0958Guido van Rossum        if name in self.subwidget_list:
3290c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            return self.subwidget_list[name]
330ce36ad8a467d914eb5c91f33835b9eaea18ee93bCollin Winter        raise AttributeError(name)
331b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
332b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def set_silent(self, value):
3330c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        """Set a variable without calling its action routine"""
3340c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call('tixSetSilent', self._w, value)
335b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
336b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def subwidget(self, name):
3370c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        """Return the named subwidget (which must have been created by
3380c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        the sub-class)."""
3390c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        n = self._subwidget_name(name)
3400c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if not n:
341ce36ad8a467d914eb5c91f33835b9eaea18ee93bCollin Winter            raise TclError("Subwidget " + name + " not child of " + self._name)
3420c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # Remove header of name and leading dot
3430c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        n = n[len(self._w)+1:]
3440c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self._nametowidget(n)
345b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
346b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def subwidgets_all(self):
3470c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        """Return all subwidgets."""
3480c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        names = self._subwidget_names()
3490c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if not names:
3500c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            return []
3510c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        retlist = []
3520c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        for name in names:
3530c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            name = name[len(self._w)+1:]
3540c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            try:
3550c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                retlist.append(self._nametowidget(name))
3560c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            except:
3570c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                # some of the widgets are unknown e.g. border in LabelFrame
3580c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                pass
3590c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return retlist
360b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
361b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def _subwidget_name(self,name):
3620c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        """Get a subwidget name (returns a String, not a Widget !)"""
3630c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        try:
3640c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            return self.tk.call(self._w, 'subwidget', name)
3650c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        except TclError:
3660c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            return None
367b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
368b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def _subwidget_names(self):
3690c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        """Return the name of all subwidgets."""
3700c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        try:
3710c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            x = self.tk.call(self._w, 'subwidgets', '-all')
372848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka            return self.tk.splitlist(x)
3730c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        except TclError:
3740c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            return None
375b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
376b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def config_all(self, option, value):
3770c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        """Set configuration options for all subwidgets (and self)."""
3780c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if option == '':
3790c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            return
380975fce37883899a55bbcdaa6300c5c6ffe9d3db2Serhiy Storchaka        elif not isinstance(option, str):
38170a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald            option = repr(option)
382975fce37883899a55bbcdaa6300c5c6ffe9d3db2Serhiy Storchaka        if not isinstance(value, str):
38370a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald            value = repr(value)
3840c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        names = self._subwidget_names()
3850c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        for name in names:
3860c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            self.tk.call(name, 'configure', '-' + option, value)
387731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz    # These are missing from Tkinter
388731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz    def image_create(self, imgtype, cnf={}, master=None, **kw):
389731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz        if not master:
39014fc4270da5db43574d46d055a5f794ed33b271fGeorg Brandl            master = tkinter._default_root
391731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz            if not master:
392ce36ad8a467d914eb5c91f33835b9eaea18ee93bCollin Winter                raise RuntimeError('Too early to create image')
393731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz        if kw and cnf: cnf = _cnfmerge((cnf, kw))
394731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz        elif kw: cnf = kw
395731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz        options = ()
396731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz        for k, v in cnf.items():
3975d1155c08edf7f53eca804b2b6538636c2dfe711Florent Xicluna            if callable(v):
398731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz                v = self._register(v)
399731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz            options = options + ('-'+k, v)
400731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz        return master.tk.call(('image', 'create', imgtype,) + options)
401731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz    def image_delete(self, imgname):
402731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz        try:
403731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz            self.tk.call('image', 'delete', imgname)
404731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz        except TclError:
405731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz            # May happen if the root was destroyed
406731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz            pass
407b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
408b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# Subwidgets are child widgets created automatically by mega-widgets.
409b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# In python, we have to create these subwidgets manually to mirror their
410b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# existence in Tk/Tix.
411b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass TixSubWidget(TixWidget):
412b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """Subwidget class.
413b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
414b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    This is used to mirror child widgets automatically created
415b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    by Tix/Tk as part of a mega-widget in Python (which is not informed
416b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    of this)"""
417b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
418b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name,
41922710823fb554a796dc96c44885d7a9389426824Moshe Zadka               destroy_physically=1, check_intermediate=1):
4200c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if check_intermediate:
4210c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            path = master._subwidget_name(name)
4220c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            try:
4230c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                path = path[len(master._w)+1:]
424ebb41907098acab04f0ed2165dca63c2b2264cedNeal Norwitz                plist = path.split('.')
4250c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            except:
4260c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                plist = []
4270c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
42889f507fe8c497b3f70fdcecce8bc240f9af2bbe2Thomas Wouters        if not check_intermediate:
4290c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            # immediate descendant
4300c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            TixWidget.__init__(self, master, None, None, {'name' : name})
4310c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        else:
4320c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            # Ensure that the intermediate widgets exist
4330c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            parent = master
4340c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            for i in range(len(plist) - 1):
435ebb41907098acab04f0ed2165dca63c2b2264cedNeal Norwitz                n = '.'.join(plist[:i+1])
4360c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                try:
4370c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                    w = master._nametowidget(n)
4380c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                    parent = w
4390c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                except KeyError:
4400c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                    # Create the intermediate widget
4410c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                    parent = TixSubWidget(parent, plist[i],
442f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                                          destroy_physically=0,
443f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                                          check_intermediate=0)
44489f507fe8c497b3f70fdcecce8bc240f9af2bbe2Thomas Wouters            # The Tk widget name is in plist, not in name
44589f507fe8c497b3f70fdcecce8bc240f9af2bbe2Thomas Wouters            if plist:
44689f507fe8c497b3f70fdcecce8bc240f9af2bbe2Thomas Wouters                name = plist[-1]
4470c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            TixWidget.__init__(self, parent, None, None, {'name' : name})
4480c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.destroy_physically = destroy_physically
449b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
450b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def destroy(self):
4510c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # For some widgets e.g., a NoteBook, when we call destructors,
4520c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # we must be careful not to destroy the frame widget since this
4530c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # also destroys the parent NoteBook thus leading to an exception
4540c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # in Tkinter when it finally calls Tcl to destroy the NoteBook
45521027e608a2b1b008231105d6eaf0a04078d395fHirokazu Yamamoto        for c in list(self.children.values()): c.destroy()
456e014a13f03abc0111591565fc0b669dd1cff0958Guido van Rossum        if self._name in self.master.children:
4570c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            del self.master.children[self._name]
458e014a13f03abc0111591565fc0b669dd1cff0958Guido van Rossum        if self._name in self.master.subwidget_list:
4590c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            del self.master.subwidget_list[self._name]
4600c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if self.destroy_physically:
4610c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            # This is bypassed only for a few widgets
4620c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            self.tk.call('destroy', self._w)
463b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
464b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
465b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# Useful class to create a display style - later shared by many items.
466b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# Contributed by Steffen Kremser
467b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass DisplayStyle:
468b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """DisplayStyle - handle configuration options shared by
469b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    (multiple) Display Items"""
470b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
4711aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka    def __init__(self, itemtype, cnf={}, *, master=None, **kw):
4721aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka        if not master:
4731aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka            if 'refwindow' in kw:
4741aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka                master = kw['refwindow']
4751aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka            elif 'refwindow' in cnf:
4761aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka                master = cnf['refwindow']
4771aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka            else:
4781aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka                master = tkinter._default_root
4791aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka                if not master:
4801aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka                    raise RuntimeError("Too early to create display style: "
4811aca3899fb6d30724c9dba14b6503fbe6dc8f5dcSerhiy Storchaka                                       "no root window")
48222710823fb554a796dc96c44885d7a9389426824Moshe Zadka        self.tk = master.tk
483ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.stylename = self.tk.call('tixDisplayStyle', itemtype,
484ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger                            *self._options(cnf,kw) )
485b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
486b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __str__(self):
4870c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.stylename
4880c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
48973e5a5b65d66f4fba9c4f626bcd6400f4a7215e6Thomas Wouters    def _options(self, cnf, kw):
4900c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if kw and cnf:
4910c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            cnf = _cnfmerge((cnf, kw))
4920c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        elif kw:
4930c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            cnf = kw
4940c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        opts = ()
4950c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        for k, v in cnf.items():
4960c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            opts = opts + ('-'+k, v)
4970c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return opts
4980c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
499b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def delete(self):
5000c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self.stylename, 'delete')
5010c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
502b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __setitem__(self,key,value):
5030c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self.stylename, 'configure', '-%s'%key, value)
5040c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
505b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def config(self, cnf={}, **kw):
506848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka        return self._getconfigure(
507848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka            self.stylename, 'configure', *self._options(cnf,kw))
5080c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
509b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __getitem__(self,key):
5100c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self.stylename, 'cget', '-%s'%key)
511b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
512b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
513b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis######################################################
514b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis### The Tix Widget classes - in alphabetical order ###
515b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis######################################################
516b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
517b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass Balloon(TixWidget):
518b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """Balloon help widget.
519b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
52022710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidget       Class
52122710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ---------       -----
522723293cb49f479a41dc893d72c2d6502587d52cbFred Drake    label           Label
523723293cb49f479a41dc893d72c2d6502587d52cbFred Drake    message         Message"""
524b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
525468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixShell
526b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master=None, cnf={}, **kw):
527652e1917c6f2bcdccb784d9d37950c381948a77cMartin v. Löwis        # static seem to be -installcolormap -initwait -statusbar -cursor
5280c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        static = ['options', 'installcolormap', 'initwait', 'statusbar',
5290c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                  'cursor']
5300c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixBalloon', static, cnf, kw)
5310c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['label'] = _dummyLabel(self, 'label',
5320c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                                                   destroy_physically=0)
5330c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['message'] = _dummyLabel(self, 'message',
5340c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                                                     destroy_physically=0)
535b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
536b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def bind_widget(self, widget, cnf={}, **kw):
5370c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        """Bind balloon widget to another.
5380c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        One balloon widget may be bound to several widgets at the same time"""
539ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'bind', widget._w, *self._options(cnf, kw))
540b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
541b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def unbind_widget(self, widget):
5420c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'unbind', widget._w)
543b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
544b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ButtonBox(TixWidget):
545b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """ButtonBox - A container for pushbuttons.
546b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    Subwidgets are the buttons added with the add method.
547b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """
548b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master=None, cnf={}, **kw):
5490c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixButtonBox',
5500c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                           ['orientation', 'options'], cnf, kw)
551b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
552b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def add(self, name, cnf={}, **kw):
5530c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        """Add a button with given name to box."""
554b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
555ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        btn = self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
5560c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list[name] = _dummyButton(self, name)
5570c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return btn
558b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
559b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def invoke(self, name):
560e014a13f03abc0111591565fc0b669dd1cff0958Guido van Rossum        if name in self.subwidget_list:
5610c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            self.tk.call(self._w, 'invoke', name)
562b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
563b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ComboBox(TixWidget):
564b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """ComboBox - an Entry field with a dropdown menu. The user can select a
56513925008dc11f2a235627dc8c0440c0ce99171d9Ezio Melotti    choice by either typing in the entry subwidget or selecting from the
566b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    listbox subwidget.
567b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
56822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidget       Class
56922710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ---------       -----
57022710823fb554a796dc96c44885d7a9389426824Moshe Zadka    entry       Entry
57122710823fb554a796dc96c44885d7a9389426824Moshe Zadka    arrow       Button
572b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    slistbox    ScrolledListBox
5730c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis    tick        Button
574b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    cross       Button : present if created with the fancy option"""
575b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
576468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixLabelWidget
577b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__ (self, master=None, cnf={}, **kw):
5780c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixComboBox',
5790c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                           ['editable', 'dropdown', 'fancy', 'options'],
5800c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                           cnf, kw)
5810c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['label'] = _dummyLabel(self, 'label')
5820c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
5830c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
5840c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
5850c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                                                                'slistbox')
5860c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        try:
5870c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            self.subwidget_list['tick'] = _dummyButton(self, 'tick')
5880c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            self.subwidget_list['cross'] = _dummyButton(self, 'cross')
5890c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        except TypeError:
5900c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            # unavailable when -fancy not specified
5910c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            pass
592b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
593731a986dfa321252e0c91d5dbf49670bd151382cNeal Norwitz    # align
594ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger
595b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def add_history(self, str):
5960c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'addhistory', str)
597b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
598b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def append_history(self, str):
5990c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'appendhistory', str)
600b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
601b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def insert(self, index, str):
6020c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'insert', index, str)
603b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
604b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def pick(self, index):
6050c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'pick', index)
606b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
607b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass Control(TixWidget):
608b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """Control - An entry field with value change arrows.  The user can
609b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    adjust the value by pressing the two arrow buttons or by entering
610b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    the value directly into the entry. The new value will be checked
611b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    against the user-defined upper and lower limits.
612b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
61322710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidget       Class
61422710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ---------       -----
61522710823fb554a796dc96c44885d7a9389426824Moshe Zadka    incr       Button
61622710823fb554a796dc96c44885d7a9389426824Moshe Zadka    decr       Button
61722710823fb554a796dc96c44885d7a9389426824Moshe Zadka    entry       Entry
61822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    label       Label"""
619b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
620468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixLabelWidget
621b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__ (self, master=None, cnf={}, **kw):
6220c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixControl', ['options'], cnf, kw)
6230c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['incr'] = _dummyButton(self, 'incr')
6240c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['decr'] = _dummyButton(self, 'decr')
6250c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['label'] = _dummyLabel(self, 'label')
6260c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
627b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
628b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def decrement(self):
6290c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'decr')
630b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
631b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def increment(self):
6320c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'incr')
633b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
634b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def invoke(self):
6350c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'invoke')
636b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
637b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def update(self):
6380c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'update')
639b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
640b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass DirList(TixWidget):
641b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """DirList - displays a list view of a directory, its previous
642b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    directories and its sub-directories. The user can choose one of
643b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    the directories displayed in the list or change to another directory.
644b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
64522710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidget       Class
64622710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ---------       -----
64722710823fb554a796dc96c44885d7a9389426824Moshe Zadka    hlist       HList
64822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    hsb              Scrollbar
64922710823fb554a796dc96c44885d7a9389426824Moshe Zadka    vsb              Scrollbar"""
650b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
651468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledHList
652b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
6530c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixDirList', ['options'], cnf, kw)
6540c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
6550c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
6560c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
657b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
658b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def chdir(self, dir):
6590c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'chdir', dir)
660b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
661b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass DirTree(TixWidget):
662b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """DirTree - Directory Listing in a hierarchical view.
663b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    Displays a tree view of a directory, its previous directories and its
664b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    sub-directories. The user can choose one of the directories displayed
665b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    in the list or change to another directory.
666b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
66722710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidget       Class
66822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ---------       -----
669f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    hlist           HList
670f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    hsb             Scrollbar
671f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    vsb             Scrollbar"""
672b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
673468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledHList
674b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
6750c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixDirTree', ['options'], cnf, kw)
6760c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
6770c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
6780c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
679b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
680b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def chdir(self, dir):
6810c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'chdir', dir)
682b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
683b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass DirSelectBox(TixWidget):
684b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """DirSelectBox - Motif style file select box.
685b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    It is generally used for
686b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    the user to choose a file. FileSelectBox stores the files mostly
687b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    recently selected into a ComboBox widget so that they can be quickly
688b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    selected again.
6890c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
690b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    Subwidget       Class
691b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    ---------       -----
692b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    selection       ComboBox
693f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    filter          ComboBox
694f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    dirlist         ScrolledListBox
695f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    filelist        ScrolledListBox"""
696b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
697b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
6980c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixDirSelectBox', ['options'], cnf, kw)
6990c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
7000c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
701b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
702b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ExFileSelectBox(TixWidget):
703b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """ExFileSelectBox - MS Windows style file select box.
7046a7b3a77b4b2be0badd24ee5f0fdbaa2e0e79c3dSerhiy Storchaka    It provides a convenient method for the user to select files.
705b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
70622710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidget       Class
70722710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ---------       -----
70822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    cancel       Button
70922710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ok              Button
71022710823fb554a796dc96c44885d7a9389426824Moshe Zadka    hidden       Checkbutton
71122710823fb554a796dc96c44885d7a9389426824Moshe Zadka    types       ComboBox
71222710823fb554a796dc96c44885d7a9389426824Moshe Zadka    dir              ComboBox
71322710823fb554a796dc96c44885d7a9389426824Moshe Zadka    file       ComboBox
71422710823fb554a796dc96c44885d7a9389426824Moshe Zadka    dirlist       ScrolledListBox
71522710823fb554a796dc96c44885d7a9389426824Moshe Zadka    filelist       ScrolledListBox"""
716b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
717b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
7180c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixExFileSelectBox', ['options'], cnf, kw)
7190c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
7200c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['ok'] = _dummyButton(self, 'ok')
7210c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
7220c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['types'] = _dummyComboBox(self, 'types')
7230c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
7240c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
7250c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['file'] = _dummyComboBox(self, 'file')
7260c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
727b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
728b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def filter(self):
7290c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'filter')
730b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
731b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def invoke(self):
7320c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'invoke')
733b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
734b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
735b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis# Should inherit from a Dialog class
736b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass DirSelectDialog(TixWidget):
737b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """The DirSelectDialog widget presents the directories in the file
738b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    system in a dialog window. The user can use this dialog window to
739b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    navigate through the file system to select the desired directory.
740b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
741b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    Subwidgets       Class
742b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    ----------       -----
743b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    dirbox       DirSelectDialog"""
744b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
745468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixDialogShell
746b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
7470c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixDirSelectDialog',
748f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['options'], cnf, kw)
7490c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dirbox'] = _dummyDirSelectBox(self, 'dirbox')
7500c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # cancel and ok buttons are missing
7510c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
752b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def popup(self):
7530c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'popup')
754b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
755b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def popdown(self):
7560c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'popdown')
757b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
758b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
759b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis# Should inherit from a Dialog class
760b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ExFileSelectDialog(TixWidget):
761b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """ExFileSelectDialog - MS Windows style file select dialog.
7626a7b3a77b4b2be0badd24ee5f0fdbaa2e0e79c3dSerhiy Storchaka    It provides a convenient method for the user to select files.
763b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
76422710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidgets       Class
76522710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ----------       -----
76622710823fb554a796dc96c44885d7a9389426824Moshe Zadka    fsbox       ExFileSelectBox"""
767b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
768468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixDialogShell
769b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
7700c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixExFileSelectDialog',
771f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['options'], cnf, kw)
7720c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['fsbox'] = _dummyExFileSelectBox(self, 'fsbox')
773b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
774b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def popup(self):
7750c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'popup')
776b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
777b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def popdown(self):
7780c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'popdown')
779b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
780b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass FileSelectBox(TixWidget):
781b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """ExFileSelectBox - Motif style file select box.
782b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    It is generally used for
783b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    the user to choose a file. FileSelectBox stores the files mostly
784b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    recently selected into a ComboBox widget so that they can be quickly
785b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    selected again.
7860c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
78722710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidget       Class
78822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ---------       -----
78922710823fb554a796dc96c44885d7a9389426824Moshe Zadka    selection       ComboBox
790f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    filter          ComboBox
791f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    dirlist         ScrolledListBox
792f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    filelist        ScrolledListBox"""
793b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
794b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
7950c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixFileSelectBox', ['options'], cnf, kw)
7960c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
7970c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
7980c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
7990c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
800b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
80122710823fb554a796dc96c44885d7a9389426824Moshe Zadka    def apply_filter(self):              # name of subwidget is same as command
8020c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'filter')
803b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
804b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def invoke(self):
8050c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'invoke')
806b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
807b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis# Should inherit from a Dialog class
808b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass FileSelectDialog(TixWidget):
809b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """FileSelectDialog - Motif style file select dialog.
810b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
81122710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidgets       Class
81222710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ----------       -----
81322710823fb554a796dc96c44885d7a9389426824Moshe Zadka    btns       StdButtonBox
81422710823fb554a796dc96c44885d7a9389426824Moshe Zadka    fsbox       FileSelectBox"""
815b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
816468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixStdDialogShell
817b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
8180c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixFileSelectDialog',
819f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['options'], cnf, kw)
8200c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['btns'] = _dummyStdButtonBox(self, 'btns')
8210c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['fsbox'] = _dummyFileSelectBox(self, 'fsbox')
822b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
823b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def popup(self):
8240c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'popup')
825b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
826b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def popdown(self):
8270c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'popdown')
828b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
829b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass FileEntry(TixWidget):
830b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """FileEntry - Entry field with button that invokes a FileSelectDialog.
831b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    The user can type in the filename manually. Alternatively, the user can
832b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    press the button widget that sits next to the entry, which will bring
833b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    up a file selection dialog.
834b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
83522710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidgets       Class
83622710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ----------       -----
83722710823fb554a796dc96c44885d7a9389426824Moshe Zadka    button       Button
83822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    entry       Entry"""
839b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
840468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixLabelWidget
841b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
8420c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixFileEntry',
843f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['dialogtype', 'options'], cnf, kw)
8440c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['button'] = _dummyButton(self, 'button')
8450c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
846b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
847b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def invoke(self):
8480c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'invoke')
849b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
850b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def file_dialog(self):
851468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        # FIXME: return python object
8520c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        pass
853b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
8541fff00832639082d2d7aa354c8e6d9110171d6bcGuilherme Poloclass HList(TixWidget, XView, YView):
855b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """HList - Hierarchy display  widget can be used to display any data
856b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    that have a hierarchical structure, for example, file system directory
857b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    trees. The list entries are indented and connected by branch lines
85813925008dc11f2a235627dc8c0440c0ce99171d9Ezio Melotti    according to their places in the hierarchy.
859b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
860b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    Subwidgets - None"""
861b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
862b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__ (self,master=None,cnf={}, **kw):
8630c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixHList',
864f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['columns', 'options'], cnf, kw)
865b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
866b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def add(self, entry, cnf={}, **kw):
867ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        return self.tk.call(self._w, 'add', entry, *self._options(cnf, kw))
868b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
869b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def add_child(self, parent=None, cnf={}, **kw):
8700c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if not parent:
8710c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            parent = ''
872ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        return self.tk.call(
873ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger                     self._w, 'addchild', parent, *self._options(cnf, kw))
874b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
875b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def anchor_set(self, entry):
8760c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'anchor', 'set', entry)
877b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
878b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def anchor_clear(self):
8790c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'anchor', 'clear')
880b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
881b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def column_width(self, col=0, width=None, chars=None):
8820c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if not chars:
8830c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            return self.tk.call(self._w, 'column', 'width', col, width)
8840c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        else:
8850c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            return self.tk.call(self._w, 'column', 'width', col,
886f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                                '-char', chars)
887b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
888b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def delete_all(self):
8890c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'delete', 'all')
890b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
891b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def delete_entry(self, entry):
8920c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'delete', 'entry', entry)
893b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
894b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def delete_offsprings(self, entry):
8950c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'delete', 'offsprings', entry)
896b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
897b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def delete_siblings(self, entry):
8980c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'delete', 'siblings', entry)
899b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
900b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def dragsite_set(self, index):
9010c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'dragsite', 'set', index)
902b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
903b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def dragsite_clear(self):
9040c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'dragsite', 'clear')
905b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
906b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def dropsite_set(self, index):
9070c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'dropsite', 'set', index)
908b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
909b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def dropsite_clear(self):
9100c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'dropsite', 'clear')
911b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
912b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def header_create(self, col, cnf={}, **kw):
913ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'header', 'create', col, *self._options(cnf, kw))
9140c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
915b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def header_configure(self, col, cnf={}, **kw):
9160c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if cnf is None:
917848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka            return self._getconfigure(self._w, 'header', 'configure', col)
918ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'header', 'configure', col,
919ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger                     *self._options(cnf, kw))
9200c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
921b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def header_cget(self,  col, opt):
9220c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'header', 'cget', col, opt)
9230c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
924b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def header_exists(self,  col):
925071dec2027a0ec5515af7e5c1317e78b0dfb347dSerhiy Storchaka        # A workaround to Tix library bug (issue #25464).
926071dec2027a0ec5515af7e5c1317e78b0dfb347dSerhiy Storchaka        # The documented command is "exists", but only erroneous "exist" is
927071dec2027a0ec5515af7e5c1317e78b0dfb347dSerhiy Storchaka        # accepted.
928071dec2027a0ec5515af7e5c1317e78b0dfb347dSerhiy Storchaka        return self.tk.getboolean(self.tk.call(self._w, 'header', 'exist', col))
929071dec2027a0ec5515af7e5c1317e78b0dfb347dSerhiy Storchaka    header_exist = header_exists
9300c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
931b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def header_delete(self, col):
93222710823fb554a796dc96c44885d7a9389426824Moshe Zadka        self.tk.call(self._w, 'header', 'delete', col)
9330c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
934b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def header_size(self, col):
93522710823fb554a796dc96c44885d7a9389426824Moshe Zadka        return self.tk.call(self._w, 'header', 'size', col)
9360c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
937b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def hide_entry(self, entry):
9380c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'hide', 'entry', entry)
939b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
940b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def indicator_create(self, entry, cnf={}, **kw):
941ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(
942ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger              self._w, 'indicator', 'create', entry, *self._options(cnf, kw))
9430c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
944b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def indicator_configure(self, entry, cnf={}, **kw):
9450c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if cnf is None:
946848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka            return self._getconfigure(
947848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka                self._w, 'indicator', 'configure', entry)
948ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(
949ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger              self._w, 'indicator', 'configure', entry, *self._options(cnf, kw))
9500c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
951b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def indicator_cget(self,  entry, opt):
9520c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'indicator', 'cget', entry, opt)
9530c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
954b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def indicator_exists(self,  entry):
9550c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call (self._w, 'indicator', 'exists', entry)
9560c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
957b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def indicator_delete(self, entry):
95822710823fb554a796dc96c44885d7a9389426824Moshe Zadka        self.tk.call(self._w, 'indicator', 'delete', entry)
9590c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
960b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def indicator_size(self, entry):
96122710823fb554a796dc96c44885d7a9389426824Moshe Zadka        return self.tk.call(self._w, 'indicator', 'size', entry)
962b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
963b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_anchor(self):
9640c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'anchor')
965b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
966bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def info_bbox(self, entry):
967bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        return self._getints(
968bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                self.tk.call(self._w, 'info', 'bbox', entry)) or None
969bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
970b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_children(self, entry=None):
9710c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        c = self.tk.call(self._w, 'info', 'children', entry)
9720c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.splitlist(c)
973b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
974b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_data(self, entry):
9750c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'data', entry)
976b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
977bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def info_dragsite(self):
978bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        return self.tk.call(self._w, 'info', 'dragsite')
979bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
980bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def info_dropsite(self):
981bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        return self.tk.call(self._w, 'info', 'dropsite')
982bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
983b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_exists(self, entry):
9840c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'exists', entry)
985b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
986b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_hidden(self, entry):
9870c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'hidden', entry)
988b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
989b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_next(self, entry):
9900c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'next', entry)
991b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
992b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_parent(self, entry):
9930c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'parent', entry)
994b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
995b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_prev(self, entry):
9960c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'prev', entry)
997b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
998b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_selection(self):
9990c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        c = self.tk.call(self._w, 'info', 'selection')
10000c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.splitlist(c)
1001b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
10023e048485f9c56066f347bc0e6a06056870847056Martin v. Löwis    def item_cget(self, entry, col, opt):
10030c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'item', 'cget', entry, col, opt)
10040c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
1005b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def item_configure(self, entry, col, cnf={}, **kw):
10060c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        if cnf is None:
1007848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka            return self._getconfigure(self._w, 'item', 'configure', entry, col)
1008ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'item', 'configure', entry, col,
1009ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger              *self._options(cnf, kw))
1010b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1011b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def item_create(self, entry, col, cnf={}, **kw):
1012ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(
1013ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger              self._w, 'item', 'create', entry, col, *self._options(cnf, kw))
1014b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1015b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def item_exists(self, entry, col):
10160c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'item', 'exists', entry, col)
10170c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
1018b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def item_delete(self, entry, col):
10190c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'item', 'delete', entry, col)
1020b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1021433fa69c4015584a2ee298faf71570813b7689dcMartin v. Löwis    def entrycget(self, entry, opt):
1022433fa69c4015584a2ee298faf71570813b7689dcMartin v. Löwis        return self.tk.call(self._w, 'entrycget', entry, opt)
1023433fa69c4015584a2ee298faf71570813b7689dcMartin v. Löwis
1024433fa69c4015584a2ee298faf71570813b7689dcMartin v. Löwis    def entryconfigure(self, entry, cnf={}, **kw):
1025433fa69c4015584a2ee298faf71570813b7689dcMartin v. Löwis        if cnf is None:
1026848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka            return self._getconfigure(self._w, 'entryconfigure', entry)
1027433fa69c4015584a2ee298faf71570813b7689dcMartin v. Löwis        self.tk.call(self._w, 'entryconfigure', entry,
1028433fa69c4015584a2ee298faf71570813b7689dcMartin v. Löwis              *self._options(cnf, kw))
1029433fa69c4015584a2ee298faf71570813b7689dcMartin v. Löwis
1030b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def nearest(self, y):
10310c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'nearest', y)
1032b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1033b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def see(self, entry):
10340c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'see', entry)
1035b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1036b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def selection_clear(self, cnf={}, **kw):
1037ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw))
1038b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1039b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def selection_includes(self, entry):
10400c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'selection', 'includes', entry)
1041b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1042b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def selection_set(self, first, last=None):
10430c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'selection', 'set', first, last)
1044b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1045b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def show_entry(self, entry):
10460c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'show', 'entry', entry)
1047b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1048b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass InputOnly(TixWidget):
1049468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    """InputOnly - Invisible widget. Unix only.
1050b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1051b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    Subwidgets - None"""
1052b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1053b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__ (self,master=None,cnf={}, **kw):
10540c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixInputOnly', None, cnf, kw)
1055b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1056b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass LabelEntry(TixWidget):
1057b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """LabelEntry - Entry field with label. Packages an entry widget
1058a90a4a96517fe25b57246083076b247f417d737dMartin Panter    and a label into one mega widget. It can be used to simplify the creation
1059a90a4a96517fe25b57246083076b247f417d737dMartin Panter    of ``entry-form'' type of interface.
1060b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
106122710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidgets       Class
106222710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ----------       -----
106322710823fb554a796dc96c44885d7a9389426824Moshe Zadka    label       Label
106422710823fb554a796dc96c44885d7a9389426824Moshe Zadka    entry       Entry"""
1065b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1066b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__ (self,master=None,cnf={}, **kw):
10670c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixLabelEntry',
1068f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['labelside','options'], cnf, kw)
10690c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['label'] = _dummyLabel(self, 'label')
10700c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
1071b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1072b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass LabelFrame(TixWidget):
1073b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """LabelFrame - Labelled Frame container. Packages a frame widget
1074b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    and a label into one mega widget. To create widgets inside a
1075b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    LabelFrame widget, one creates the new widgets relative to the
1076b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    frame subwidget and manage them inside the frame subwidget.
1077b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
107822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidgets       Class
107922710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ----------       -----
108022710823fb554a796dc96c44885d7a9389426824Moshe Zadka    label       Label
108122710823fb554a796dc96c44885d7a9389426824Moshe Zadka    frame       Frame"""
1082b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1083b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__ (self,master=None,cnf={}, **kw):
10840c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixLabelFrame',
1085f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['labelside','options'], cnf, kw)
10860c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['label'] = _dummyLabel(self, 'label')
10870c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['frame'] = _dummyFrame(self, 'frame')
1088b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1089b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1090b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass ListNoteBook(TixWidget):
1091b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """A ListNoteBook widget is very similar to the TixNoteBook widget:
1092b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    it can be used to display many windows in a limited space using a
1093b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    notebook metaphor. The notebook is divided into a stack of pages
1094b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    (windows). At one time only one of these pages can be shown.
1095b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    The user can navigate through these pages by
1096b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    choosing the name of the desired page in the hlist subwidget."""
1097b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1098b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
1099f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        TixWidget.__init__(self, master, 'tixListNoteBook', ['options'], cnf, kw)
1100f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        # Is this necessary? It's not an exposed subwidget in Tix.
1101f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        self.subwidget_list['pane'] = _dummyPanedWindow(self, 'pane',
1102f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                                                        destroy_physically=0)
1103f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1104f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        self.subwidget_list['shlist'] = _dummyScrolledHList(self, 'shlist')
1105b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1106b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def add(self, name, cnf={}, **kw):
1107ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
11080c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list[name] = TixSubWidget(self, name)
11090c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.subwidget_list[name]
1110b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
111101824bf50c2967c264b0fb4a13d08bb5c1d9665cMartin v. Löwis    def page(self, name):
1112182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return self.subwidget(name)
111301824bf50c2967c264b0fb4a13d08bb5c1d9665cMartin v. Löwis
111401824bf50c2967c264b0fb4a13d08bb5c1d9665cMartin v. Löwis    def pages(self):
1115182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        # Can't call subwidgets_all directly because we don't want .nbframe
11166bc87b4b4dc9566c4ee8bf1a256e0f2686cf0f4bSerhiy Storchaka        names = self.tk.splitlist(self.tk.call(self._w, 'pages'))
1117182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        ret = []
1118182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        for x in names:
1119182b5aca27d376b08a2904bed42b751496f932f3Tim Peters            ret.append(self.subwidget(x))
1120182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return ret
112101824bf50c2967c264b0fb4a13d08bb5c1d9665cMartin v. Löwis
1122b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def raise_page(self, name):              # raise is a python keyword
11230c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'raise', name)
1124b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1125b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass Meter(TixWidget):
1126b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """The Meter widget can be used to show the progress of a background
1127b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    job which may take a long time to execute.
1128b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """
1129b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1130b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def __init__(self, master=None, cnf={}, **kw):
11310c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixMeter',
1132f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['options'], cnf, kw)
1133b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1134b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass NoteBook(TixWidget):
1135b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """NoteBook - Multi-page container widget (tabbed notebook metaphor).
1136b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
113722710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidgets       Class
113822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ----------       -----
113922710823fb554a796dc96c44885d7a9389426824Moshe Zadka    nbframe       NoteBookFrame
1140b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    <pages>       page widgets added dynamically with the add method"""
1141b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1142b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__ (self,master=None,cnf={}, **kw):
11430c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self,master,'tixNoteBook', ['options'], cnf, kw)
11440c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['nbframe'] = TixSubWidget(self, 'nbframe',
1145f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                                                      destroy_physically=0)
1146b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1147b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def add(self, name, cnf={}, **kw):
1148ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
11490c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list[name] = TixSubWidget(self, name)
11500c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.subwidget_list[name]
1151b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1152b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def delete(self, name):
11530c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'delete', name)
11540c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list[name].destroy()
11550c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        del self.subwidget_list[name]
1156b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1157b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def page(self, name):
11580c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.subwidget(name)
1159b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1160b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def pages(self):
11610c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # Can't call subwidgets_all directly because we don't want .nbframe
11626bc87b4b4dc9566c4ee8bf1a256e0f2686cf0f4bSerhiy Storchaka        names = self.tk.splitlist(self.tk.call(self._w, 'pages'))
11630c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        ret = []
11640c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        for x in names:
11650c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            ret.append(self.subwidget(x))
11660c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return ret
1167b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
116822710823fb554a796dc96c44885d7a9389426824Moshe Zadka    def raise_page(self, name):              # raise is a python keyword
11690c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'raise', name)
1170b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1171b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def raised(self):
11720c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'raised')
1173b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1174b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass NoteBookFrame(TixWidget):
1175468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: This is dangerous to expose to be called on its own.
1176b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    pass
1177b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1178b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass OptionMenu(TixWidget):
1179b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """OptionMenu - creates a menu button of options.
1180b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
118122710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidget       Class
118222710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ---------       -----
1183f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    menubutton      Menubutton
1184f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    menu            Menu"""
1185b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1186b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
11870c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixOptionMenu', ['options'], cnf, kw)
11880c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
11890c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
1190b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1191b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def add_command(self, name, cnf={}, **kw):
1192ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'add', 'command', name, *self._options(cnf, kw))
1193b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1194b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def add_separator(self, name, cnf={}, **kw):
1195ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'add', 'separator', name, *self._options(cnf, kw))
1196b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1197b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def delete(self, name):
11980c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'delete', name)
1199b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1200b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def disable(self, name):
12010c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'disable', name)
1202b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1203b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def enable(self, name):
12040c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'enable', name)
1205b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1206b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass PanedWindow(TixWidget):
1207b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """PanedWindow - Multi-pane container widget
1208b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    allows the user to interactively manipulate the sizes of several
1209b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    panes. The panes can be arranged either vertically or horizontally.The
1210b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    user changes the sizes of the panes by dragging the resize handle
1211b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    between two panes.
1212b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
121322710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidgets       Class
121422710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ----------       -----
1215b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    <panes>       g/p widgets added dynamically with the add method."""
1216b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1217b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
12180c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixPanedWindow', ['orientation', 'options'], cnf, kw)
1219b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1220f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    # add delete forget panecget paneconfigure panes setsize
1221b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def add(self, name, cnf={}, **kw):
1222ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
12230c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list[name] = TixSubWidget(self, name,
1224f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                                                 check_intermediate=0)
12250c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.subwidget_list[name]
1226b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1227f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    def delete(self, name):
1228f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        self.tk.call(self._w, 'delete', name)
1229f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        self.subwidget_list[name].destroy()
1230f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        del self.subwidget_list[name]
1231f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1232f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    def forget(self, name):
1233f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        self.tk.call(self._w, 'forget', name)
1234f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1235f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    def panecget(self,  entry, opt):
1236f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        return self.tk.call(self._w, 'panecget', entry, opt)
1237f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1238f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    def paneconfigure(self, entry, cnf={}, **kw):
1239f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        if cnf is None:
1240848972cac1d8a1d5a8828c807dbdaa26c2567b2cSerhiy Storchaka            return self._getconfigure(self._w, 'paneconfigure', entry)
1241ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'paneconfigure', entry, *self._options(cnf, kw))
1242f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1243b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def panes(self):
1244bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        names = self.tk.splitlist(self.tk.call(self._w, 'panes'))
1245bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        return [self.subwidget(x) for x in names]
1246b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1247b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass PopupMenu(TixWidget):
1248b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """PopupMenu widget can be used as a replacement of the tk_popup command.
1249b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    The advantage of the Tix PopupMenu widget is it requires less application
1250b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    code to manipulate.
1251b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1252b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
125322710823fb554a796dc96c44885d7a9389426824Moshe Zadka    Subwidgets       Class
125422710823fb554a796dc96c44885d7a9389426824Moshe Zadka    ----------       -----
125522710823fb554a796dc96c44885d7a9389426824Moshe Zadka    menubutton       Menubutton
125622710823fb554a796dc96c44885d7a9389426824Moshe Zadka    menu       Menu"""
1257b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1258468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixShell
1259b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
12600c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixPopupMenu', ['options'], cnf, kw)
12610c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
12620c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
1263b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1264b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def bind_widget(self, widget):
12650c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'bind', widget._w)
1266b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1267b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def unbind_widget(self, widget):
12680c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'unbind', widget._w)
1269b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1270b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def post_widget(self, widget, x, y):
12710c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'post', widget._w, x, y)
1272b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1273b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ResizeHandle(TixWidget):
1274b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """Internal widget to draw resize handles on Scrolled widgets."""
1275b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
12760c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # There seems to be a Tix bug rejecting the configure method
12770c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # Let's try making the flags -static
12780c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        flags = ['options', 'command', 'cursorfg', 'cursorbg',
12790c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                 'handlesize', 'hintcolor', 'hintwidth',
12800c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis                 'x', 'y']
12810c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        # In fact, x y height width are configurable
12820c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixResizeHandle',
1283f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           flags, cnf, kw)
1284b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1285b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def attach_widget(self, widget):
12860c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'attachwidget', widget._w)
1287b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1288652e1917c6f2bcdccb784d9d37950c381948a77cMartin v. Löwis    def detach_widget(self, widget):
12890c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'detachwidget', widget._w)
1290652e1917c6f2bcdccb784d9d37950c381948a77cMartin v. Löwis
1291652e1917c6f2bcdccb784d9d37950c381948a77cMartin v. Löwis    def hide(self, widget):
12920c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'hide', widget._w)
1293652e1917c6f2bcdccb784d9d37950c381948a77cMartin v. Löwis
1294652e1917c6f2bcdccb784d9d37950c381948a77cMartin v. Löwis    def show(self, widget):
12950c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'show', widget._w)
1296652e1917c6f2bcdccb784d9d37950c381948a77cMartin v. Löwis
1297b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ScrolledHList(TixWidget):
1298b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """ScrolledHList - HList with automatic scrollbars."""
1299b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1300468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledWidget
1301b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
13020c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixScrolledHList', ['options'],
1303f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           cnf, kw)
13040c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
13050c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
13060c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
1307b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1308b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ScrolledListBox(TixWidget):
1309b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """ScrolledListBox - Listbox with automatic scrollbars."""
1310b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1311468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledWidget
1312b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
13130c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixScrolledListBox', ['options'], cnf, kw)
13140c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
13150c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
13160c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
1317b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1318b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ScrolledText(TixWidget):
1319b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """ScrolledText - Text with automatic scrollbars."""
1320b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1321468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledWidget
1322b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
13230c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixScrolledText', ['options'], cnf, kw)
13240c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['text'] = _dummyText(self, 'text')
13250c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
13260c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
1327b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1328b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ScrolledTList(TixWidget):
1329b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """ScrolledTList - TList with automatic scrollbars."""
1330b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1331468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledWidget
1332b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
13330c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixScrolledTList', ['options'],
1334f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           cnf, kw)
13350c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['tlist'] = _dummyTList(self, 'tlist')
13360c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
13370c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
1338b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1339b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass ScrolledWindow(TixWidget):
1340b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """ScrolledWindow - Window with automatic scrollbars."""
1341b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1342468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledWidget
1343b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
13440c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixScrolledWindow', ['options'], cnf, kw)
13450c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['window'] = _dummyFrame(self, 'window')
13460c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
13470c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
1348b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1349b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass Select(TixWidget):
1350b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """Select - Container of button subwidgets. It can be used to provide
1351b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    radio-box or check-box style of selection options for the user.
1352b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1353b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    Subwidgets are buttons added dynamically using the add method."""
1354b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1355468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixLabelWidget
1356b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, cnf={}, **kw):
13570c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixSelect',
1358f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['allowzero', 'radio', 'orientation', 'labelside',
1359f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                            'options'],
1360f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           cnf, kw)
13610c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['label'] = _dummyLabel(self, 'label')
1362b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1363b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def add(self, name, cnf={}, **kw):
1364ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
13650c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list[name] = _dummyButton(self, name)
13660c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.subwidget_list[name]
1367b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1368b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def invoke(self, name):
13690c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'invoke', name)
1370b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1371f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitzclass Shell(TixWidget):
1372f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    """Toplevel window.
1373f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1374f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    Subwidgets - None"""
1375f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1376f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    def __init__ (self,master=None,cnf={}, **kw):
1377f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        TixWidget.__init__(self, master, 'tixShell', ['options', 'title'], cnf, kw)
1378f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1379f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitzclass DialogShell(TixWidget):
1380f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    """Toplevel window, with popup popdown and center methods.
1381f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    It tells the window manager that it is a dialog window and should be
1382f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    treated specially. The exact treatment depends on the treatment of
1383f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    the window manager.
1384f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1385f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    Subwidgets - None"""
1386f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1387468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit from  Shell
1388f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    def __init__ (self,master=None,cnf={}, **kw):
1389f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        TixWidget.__init__(self, master,
1390f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           'tixDialogShell',
1391f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['options', 'title', 'mapped',
1392f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                            'minheight', 'minwidth',
1393f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                            'parent', 'transient'], cnf, kw)
1394f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1395f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    def popdown(self):
1396f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        self.tk.call(self._w, 'popdown')
1397f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1398f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    def popup(self):
1399f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        self.tk.call(self._w, 'popup')
1400f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1401f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz    def center(self):
1402f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz        self.tk.call(self._w, 'center')
1403f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz
1404b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass StdButtonBox(TixWidget):
1405b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    """StdButtonBox - Standard Button Box (OK, Apply, Cancel and Help) """
1406b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1407b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master=None, cnf={}, **kw):
14080c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixStdButtonBox',
1409f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['orientation', 'options'], cnf, kw)
14100c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['ok'] = _dummyButton(self, 'ok')
14110c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['apply'] = _dummyButton(self, 'apply')
14120c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
14130c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['help'] = _dummyButton(self, 'help')
1414b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1415b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def invoke(self, name):
1416e014a13f03abc0111591565fc0b669dd1cff0958Guido van Rossum        if name in self.subwidget_list:
14170c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis            self.tk.call(self._w, 'invoke', name)
1418b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
14191fff00832639082d2d7aa354c8e6d9110171d6bcGuilherme Poloclass TList(TixWidget, XView, YView):
1420b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """TList - Hierarchy display widget which can be
1421b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    used to display data in a tabular format. The list entries of a TList
1422b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    widget are similar to the entries in the Tk listbox widget. The main
1423b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    differences are (1) the TList widget can display the list entries in a
1424b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    two dimensional format and (2) you can use graphical images as well as
1425b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    multiple colors and fonts for the list entries.
1426b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1427b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    Subwidgets - None"""
1428b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1429b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__ (self,master=None,cnf={}, **kw):
14300c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixTList', ['options'], cnf, kw)
1431b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1432b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def active_set(self, index):
14330c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'active', 'set', index)
1434b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1435b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def active_clear(self):
14360c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'active', 'clear')
1437b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1438b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def anchor_set(self, index):
14390c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'anchor', 'set', index)
1440b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1441b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def anchor_clear(self):
14420c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'anchor', 'clear')
1443b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1444b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def delete(self, from_, to=None):
14450c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'delete', from_, to)
1446b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1447b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def dragsite_set(self, index):
14480c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'dragsite', 'set', index)
1449b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1450b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def dragsite_clear(self):
14510c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'dragsite', 'clear')
1452b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1453b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def dropsite_set(self, index):
14540c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'dropsite', 'set', index)
1455b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1456b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def dropsite_clear(self):
14570c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'dropsite', 'clear')
1458b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1459b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def insert(self, index, cnf={}, **kw):
1460ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'insert', index, *self._options(cnf, kw))
1461b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1462b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_active(self):
14630c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'active')
1464b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1465b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_anchor(self):
14660c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'anchor')
1467b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1468b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_down(self, index):
14690c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'down', index)
1470b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1471b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_left(self, index):
14720c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'left', index)
1473b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1474b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_right(self, index):
14750c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'right', index)
1476b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1477b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_selection(self):
14780c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        c = self.tk.call(self._w, 'info', 'selection')
14790c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.splitlist(c)
1480b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1481b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_size(self):
14820c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'size')
1483b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1484b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def info_up(self, index):
14850c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'info', 'up', index)
1486b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1487b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def nearest(self, x, y):
14880c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'nearest', x, y)
1489b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1490b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def see(self, index):
14910c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'see', index)
1492b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1493b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def selection_clear(self, cnf={}, **kw):
1494ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger        self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw))
1495b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1496b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def selection_includes(self, index):
14970c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'selection', 'includes', index)
1498b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1499b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def selection_set(self, first, last=None):
15000c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'selection', 'set', first, last)
1501b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1502b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass Tree(TixWidget):
150313925008dc11f2a235627dc8c0440c0ce99171d9Ezio Melotti    """Tree - The tixTree widget can be used to display hierarchical
1504b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    data in a tree form. The user can adjust
1505b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    the view of the tree by opening or closing parts of the tree."""
1506b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1507468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledWidget
1508b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master=None, cnf={}, **kw):
15090c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixWidget.__init__(self, master, 'tixTree',
1510f539bdeb9cbddc914b8a604156200a560c891fc8Neal Norwitz                           ['options'], cnf, kw)
15110c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
15120c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
15130c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
1514b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1515b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def autosetmode(self):
1516468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''This command calls the setmode method for all the entries in this
1517468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     Tree widget: if an entry has no child entries, its mode is set to
1518468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     none. Otherwise, if the entry has any hidden child entries, its mode is
1519468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     set to open; otherwise its mode is set to close.'''
15200c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'autosetmode')
1521b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1522b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def close(self, entrypath):
1523468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''Close the entry given by entryPath if its mode is close.'''
15240c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'close', entrypath)
1525b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1526b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def getmode(self, entrypath):
1527468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''Returns the current mode of the entry given by entryPath.'''
15280c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        return self.tk.call(self._w, 'getmode', entrypath)
1529b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1530b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def open(self, entrypath):
1531468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''Open the entry given by entryPath if its mode is open.'''
15320c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'open', entrypath)
1533b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1534b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def setmode(self, entrypath, mode='none'):
1535468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''This command is used to indicate whether the entry given by
1536468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     entryPath has children entries and whether the children are visible. mode
1537468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     must be one of open, close or none. If mode is set to open, a (+)
1538e130a52d8a60229f53c8bc2ea7a1f51ee592bbd7Ezio Melotti     indicator is drawn next the entry. If mode is set to close, a (-)
1539e130a52d8a60229f53c8bc2ea7a1f51ee592bbd7Ezio Melotti     indicator is drawn next the entry. If mode is set to none, no
1540468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     indicators will be drawn for this entry. The default mode is none. The
1541468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     open mode indicates the entry has hidden children and this entry can be
1542468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     opened by the user. The close mode indicates that all the children of the
1543468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     entry are now visible and the entry can be closed by the user.'''
15440c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.tk.call(self._w, 'setmode', entrypath, mode)
1545b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1546b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1547b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis# Could try subclassing Tree for CheckList - would need another arg to init
1548b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass CheckList(TixWidget):
1549b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """The CheckList widget
1550b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    displays a list of items to be selected by the user. CheckList acts
1551b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    similarly to the Tk checkbutton or radiobutton widgets, except it is
1552b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    capable of handling many more items than checkbuttons or radiobuttons.
1553b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """
1554468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixTree
1555b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def __init__(self, master=None, cnf={}, **kw):
1556b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        TixWidget.__init__(self, master, 'tixCheckList',
1557bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                           ['options', 'radio'], cnf, kw)
1558b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1559b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1560b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
15610c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis
1562b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def autosetmode(self):
1563468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''This command calls the setmode method for all the entries in this
1564468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     Tree widget: if an entry has no child entries, its mode is set to
1565468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     none. Otherwise, if the entry has any hidden child entries, its mode is
1566468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     set to open; otherwise its mode is set to close.'''
1567b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        self.tk.call(self._w, 'autosetmode')
1568b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1569b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def close(self, entrypath):
1570468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''Close the entry given by entryPath if its mode is close.'''
1571b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        self.tk.call(self._w, 'close', entrypath)
1572b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1573b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def getmode(self, entrypath):
1574468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''Returns the current mode of the entry given by entryPath.'''
1575b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        return self.tk.call(self._w, 'getmode', entrypath)
1576b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1577b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def open(self, entrypath):
1578468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''Open the entry given by entryPath if its mode is open.'''
1579b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        self.tk.call(self._w, 'open', entrypath)
1580b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1581b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def getselection(self, mode='on'):
1582468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''Returns a list of items whose status matches status. If status is
1583468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     not specified, the list of items in the "on" status will be returned.
1584468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     Mode can be on, off, default'''
15856bc87b4b4dc9566c4ee8bf1a256e0f2686cf0f4bSerhiy Storchaka        return self.tk.splitlist(self.tk.call(self._w, 'getselection', mode))
1586b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1587b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def getstatus(self, entrypath):
1588468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''Returns the current status of entryPath.'''
1589468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        return self.tk.call(self._w, 'getstatus', entrypath)
1590b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1591b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def setstatus(self, entrypath, mode='on'):
1592468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis        '''Sets the status of entryPath to be status. A bitmap will be
1593468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis     displayed next to the entry its status is on, off or default.'''
1594b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis        self.tk.call(self._w, 'setstatus', entrypath, mode)
1595b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1596b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1597b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis###########################################################################
1598b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis### The subclassing below is used to instantiate the subwidgets in each ###
1599b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis### mega widget. This allows us to access their methods directly.       ###
1600b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis###########################################################################
1601b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1602b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyButton(Button, TixSubWidget):
1603b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16040c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1605b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1606b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyCheckbutton(Checkbutton, TixSubWidget):
1607b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16080c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1609b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1610b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyEntry(Entry, TixSubWidget):
1611b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16120c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1613b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1614b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyFrame(Frame, TixSubWidget):
1615b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16160c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1617b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1618b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyLabel(Label, TixSubWidget):
1619b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16200c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1621b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1622b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyListbox(Listbox, TixSubWidget):
1623b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16240c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1625b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1626b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyMenu(Menu, TixSubWidget):
1627b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16280c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1629b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1630b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyMenubutton(Menubutton, TixSubWidget):
1631b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16320c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1633b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1634b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyScrollbar(Scrollbar, TixSubWidget):
1635b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16360c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1637b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1638b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyText(Text, TixSubWidget):
1639b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16400c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1641b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1642b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyScrolledListBox(ScrolledListBox, TixSubWidget):
1643b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16440c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
16450c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
16460c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
16470c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
1648b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1649b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyHList(HList, TixSubWidget):
1650b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16510c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1652b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1653b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass _dummyScrolledHList(ScrolledHList, TixSubWidget):
1654b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16550c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
16560c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
16570c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
16580c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
1659b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1660b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyTList(TList, TixSubWidget):
1661b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16620c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1663b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1664b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyComboBox(ComboBox, TixSubWidget):
1665b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
1666d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz        TixSubWidget.__init__(self, master, name, ['fancy',destroy_physically])
1667d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz        self.subwidget_list['label'] = _dummyLabel(self, 'label')
16680c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
16690c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
1670d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz
16710c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
1672d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz                                                                'slistbox')
1673d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz        try:
1674d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz            self.subwidget_list['tick'] = _dummyButton(self, 'tick')
1675d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz            #cross Button : present if created with the fancy option
1676d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz            self.subwidget_list['cross'] = _dummyButton(self, 'cross')
1677d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz        except TypeError:
1678d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz            # unavailable when -fancy not specified
1679d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz            pass
1680b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1681b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyDirList(DirList, TixSubWidget):
1682b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16830c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
16840c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
16850c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
16860c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
1687b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1688b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass _dummyDirSelectBox(DirSelectBox, TixSubWidget):
1689b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16900c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
16910c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
16920c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
1693b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1694b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyExFileSelectBox(ExFileSelectBox, TixSubWidget):
1695b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
16960c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
16970c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
16980c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['ok'] = _dummyButton(self, 'ok')
16990c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
17000c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['types'] = _dummyComboBox(self, 'types')
17010c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
17020c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
17030c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['file'] = _dummyComboBox(self, 'file')
17040c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
1705b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1706b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyFileSelectBox(FileSelectBox, TixSubWidget):
1707b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
17080c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
17090c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
17100c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
17110c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
17120c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
1713b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1714b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass _dummyFileComboBox(ComboBox, TixSubWidget):
1715b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
17160c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
17170c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['dircbx'] = _dummyComboBox(self, 'dircbx')
1718b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis
1719b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyStdButtonBox(StdButtonBox, TixSubWidget):
1720b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=1):
17210c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
17220c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['ok'] = _dummyButton(self, 'ok')
17230c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['apply'] = _dummyButton(self, 'apply')
17240c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
17250c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        self.subwidget_list['help'] = _dummyButton(self, 'help')
1726b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1727b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisclass _dummyNoteBookFrame(NoteBookFrame, TixSubWidget):
1728b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    def __init__(self, master, name, destroy_physically=0):
17290c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        TixSubWidget.__init__(self, master, name, destroy_physically)
1730b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
173101824bf50c2967c264b0fb4a13d08bb5c1d9665cMartin v. Löwisclass _dummyPanedWindow(PanedWindow, TixSubWidget):
173201824bf50c2967c264b0fb4a13d08bb5c1d9665cMartin v. Löwis    def __init__(self, master, name, destroy_physically=1):
1733182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        TixSubWidget.__init__(self, master, name, destroy_physically)
173401824bf50c2967c264b0fb4a13d08bb5c1d9665cMartin v. Löwis
1735b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis########################
1736b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis### Utility Routines ###
1737b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis########################
1738b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1739d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz#mike Should tixDestroy be exposed as a wrapper? - but not for widgets.
1740d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz
1741b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisdef OptionName(widget):
1742d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    '''Returns the qualified path name for the widget. Normally used to set
1743d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    default options for subwidgets. See tixwidgets.py'''
1744b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    return widget.tk.call('tixOptionName', widget._w)
1745b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1746b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# Called with a dictionary argument of the form
1747b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# {'*.c':'C source files', '*.txt':'Text Files', '*':'All files'}
1748b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# returns a string which can be used to configure the fsbox file types
1749b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# in an ExFileSelectBox. i.e.,
1750b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis# '{{*} {* - All files}} {{*.c} {*.c - C source files}} {{*.txt} {*.txt - Text Files}}'
1751b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisdef FileTypeList(dict):
1752b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    s = ''
1753b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    for type in dict.keys():
17540c0d56a22fa939e46d44a5727ed45ccd37bc8206Martin v. Löwis        s = s + '{{' + type + '} {' + type + ' - ' + dict[type] + '}} '
1755b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    return s
1756b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
1757b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis# Still to be done:
1758468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis# tixIconView
1759b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwisclass CObjView(TixWidget):
1760b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """This file implements the Canvas Object View widget. This is a base
1761b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    class of IconView. It implements automatic placement/adjustment of the
1762b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    scrollbars according to the canvas objects inside the canvas subwidget.
1763b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    The scrollbars are adjusted so that the canvas is just large enough
1764b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    to see all the objects.
1765b7b32601281f25ffed50f8187c78a3802fa14039Martin v. Löwis    """
1766468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledWidget
1767468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    pass
1768468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis
176949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
17701fff00832639082d2d7aa354c8e6d9110171d6bcGuilherme Poloclass Grid(TixWidget, XView, YView):
1771d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    '''The Tix Grid command creates a new window  and makes it into a
1772d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    tixGrid widget. Additional options, may be specified on the command
1773d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    line or in the option database to configure aspects such as its cursor
1774d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    and relief.
1775d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz
1776d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    A Grid widget displays its contents in a two dimensional grid of cells.
1777d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    Each cell may contain one Tix display item, which may be in text,
1778d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    graphics or other formats. See the DisplayStyle class for more information
1779d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    about Tix display items. Individual cells, or groups of cells, can be
1780d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    formatted with a wide range of attributes, such as its color, relief and
1781d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    border.
1782d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz
1783d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    Subwidgets - None'''
178449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # valid specific resources as of Tk 8.4
178549fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # editdonecmd, editnotifycmd, floatingcols, floatingrows, formatcmd,
178649fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # highlightbackground, highlightcolor, leftmargin, itemtype, selectmode,
178749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # selectunit, topmargin,
178849fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def __init__(self, master=None, cnf={}, **kw):
178949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        static= []
179049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        self.cnf= cnf
179149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        TixWidget.__init__(self, master, 'tixGrid', static, cnf, kw)
179249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
179349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # valid options as of Tk 8.4
1794bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    # anchor, bdtype, cget, configure, delete, dragsite, dropsite, entrycget,
1795bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    # edit, entryconfigure, format, geometryinfo, info, index, move, nearest,
1796bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    # selection, set, size, unset, xview, yview
1797bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def anchor_clear(self):
1798bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        """Removes the selection anchor."""
1799bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        self.tk.call(self, 'anchor', 'clear')
1800bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
180149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def anchor_get(self):
180249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        "Get the (x,y) coordinate of the current anchor cell"
180349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        return self._getints(self.tk.call(self, 'anchor', 'get'))
180449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
1805bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def anchor_set(self, x, y):
1806bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        """Set the selection anchor to the cell at (x, y)."""
1807bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        self.tk.call(self, 'anchor', 'set', x, y)
1808bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
180949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def delete_row(self, from_, to=None):
181049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        """Delete rows between from_ and to inclusive.
181149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        If to is not provided,  delete only row at from_"""
181249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        if to is None:
181349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters            self.tk.call(self, 'delete', 'row', from_)
181449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        else:
181549fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters            self.tk.call(self, 'delete', 'row', from_, to)
1816bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
181749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def delete_column(self, from_, to=None):
181849fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        """Delete columns between from_ and to inclusive.
181949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        If to is not provided,  delete only column at from_"""
182049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        if to is None:
182149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters            self.tk.call(self, 'delete', 'column', from_)
182249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        else:
182349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters            self.tk.call(self, 'delete', 'column', from_, to)
1824bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
1825bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def edit_apply(self):
1826bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        """If any cell is being edited, de-highlight the cell  and  applies
1827bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        the changes."""
1828bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        self.tk.call(self, 'edit', 'apply')
1829bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
1830bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def edit_set(self, x, y):
1831bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        """Highlights  the  cell  at  (x, y) for editing, if the -editnotify
1832bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        command returns True for this cell."""
1833bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        self.tk.call(self, 'edit', 'set', x, y)
183449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
183549fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def entrycget(self, x, y, option):
183649fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        "Get the option value for cell at (x,y)"
1837bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        if option and option[0] != '-':
1838bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo            option = '-' + option
183949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        return self.tk.call(self, 'entrycget', x, y, option)
184049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
1841bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def entryconfigure(self, x, y, cnf=None, **kw):
1842bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        return self._configure(('entryconfigure', x, y), cnf, kw)
1843bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
1844d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    # def format
1845d8b5e3fda1d82dfc1f56a31e48124ff4e5a02bdcNeal Norwitz    # def index
184649fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
184749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def info_exists(self, x, y):
184849fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        "Return True if display item exists at (x,y)"
1849bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        return self._getboolean(self.tk.call(self, 'info', 'exists', x, y))
185049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
185149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def info_bbox(self, x, y):
185249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        # This seems to always return '', at least for 'text' displayitems
185349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        return self.tk.call(self, 'info', 'bbox', x, y)
185449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
1855bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def move_column(self, from_, to, offset):
1856e130a52d8a60229f53c8bc2ea7a1f51ee592bbd7Ezio Melotti        """Moves the range of columns from position FROM through TO by
1857bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        the distance indicated by OFFSET. For example, move_column(2, 4, 1)
1858bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        moves the columns 2,3,4 to columns 3,4,5."""
1859bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        self.tk.call(self, 'move', 'column', from_, to, offset)
1860bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
1861bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def move_row(self, from_, to, offset):
1862e130a52d8a60229f53c8bc2ea7a1f51ee592bbd7Ezio Melotti        """Moves the range of rows from position FROM through TO by
1863bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        the distance indicated by OFFSET.
1864bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        For example, move_row(2, 4, 1) moves the rows 2,3,4 to rows 3,4,5."""
1865bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        self.tk.call(self, 'move', 'row', from_, to, offset)
1866bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
186749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def nearest(self, x, y):
186849fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        "Return coordinate of cell nearest pixel coordinate (x,y)"
186949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        return self._getints(self.tk.call(self, 'nearest', x, y))
187049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
187149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # def selection adjust
187249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # def selection clear
187349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # def selection includes
187449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # def selection set
187549fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    # def selection toggle
187649fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
187749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def set(self, x, y, itemtype=None, **kw):
187849fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        args= self._options(self.cnf, kw)
187949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        if itemtype is not None:
188049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters            args= ('-itemtype', itemtype) + args
188149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        self.tk.call(self, 'set', x, y, *args)
188249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters
1883bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def size_column(self, index, **kw):
1884c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        """Queries or sets the size of the column given by
1885c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        INDEX.  INDEX may be any non-negative
1886c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        integer that gives the position of a given column.
1887bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        INDEX can also be the string "default"; in this case, this command
1888bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        queries or sets the default size of all columns.
1889c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        When no option-value pair is given, this command returns a tuple
1890c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        containing the current size setting of the given column.  When
1891c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        option-value pairs are given, the corresponding options of the
1892bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        size setting of the given column are changed. Options may be one
1893c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        of the follwing:
1894bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo              pad0 pixels
1895bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                     Specifies the paddings to the left of a column.
1896bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo              pad1 pixels
1897c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     Specifies the paddings to the right of a column.
1898bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo              size val
1899c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     Specifies the width of a column.  Val may be:
1900c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     "auto" -- the width of the column is set to the
1901c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     width of the widest cell in the column;
1902c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     a valid Tk screen distance unit;
1903c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     or a real number following by the word chars
1904bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                     (e.g. 3.4chars) that sets the width of the column to the
1905bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                     given number of characters."""
19066bc87b4b4dc9566c4ee8bf1a256e0f2686cf0f4bSerhiy Storchaka        return self.tk.splitlist(self.tk.call(self._w, 'size', 'column', index,
1907bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                             *self._options({}, kw)))
1908bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
1909bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def size_row(self, index, **kw):
1910c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        """Queries or sets the size of the row given by
1911c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        INDEX. INDEX may be any non-negative
1912c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        integer that gives the position of a given row .
1913bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        INDEX can also be the string "default"; in this case, this command
1914bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        queries or sets the default size of all rows.
1915c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        When no option-value pair is given, this command returns a list con-
1916c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy        taining the current size setting of the given row . When option-value
1917bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        pairs are given, the corresponding options of the size setting of the
1918bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        given row are changed. Options may be one of the follwing:
1919bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo              pad0 pixels
1920bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                     Specifies the paddings to the top of a row.
1921bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo              pad1 pixels
1922e130a52d8a60229f53c8bc2ea7a1f51ee592bbd7Ezio Melotti                     Specifies the paddings to the bottom of a row.
1923bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo              size val
1924c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     Specifies the height of a row.  Val may be:
1925c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     "auto" -- the height of the row is set to the
1926c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     height of the highest cell in the row;
1927c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     a valid Tk screen distance unit;
1928c30b7b16ea03ad094917615940cd1a9ef53c4904Terry Jan Reedy                     or a real number following by the word chars
1929bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                     (e.g. 3.4chars) that sets the height of the row to the
1930bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                     given number of characters."""
19316bc87b4b4dc9566c4ee8bf1a256e0f2686cf0f4bSerhiy Storchaka        return self.tk.splitlist(self.tk.call(
1932bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo                    self, 'size', 'row', index, *self._options({}, kw)))
1933bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
1934bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo    def unset(self, x, y):
1935bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        """Clears the cell at (x, y) by removing its display item."""
1936bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo        self.tk.call(self._w, 'unset', x, y)
1937bcd03df1bd71a8fe272018072fc6ee145e83b425Guilherme Polo
1938ff41c48a77b7d1411ce97190c8b8405bdaa261e1Raymond Hettinger
193949fd7fa4431da299196d74087df4a04f99f9c46fThomas Woutersclass ScrolledGrid(Grid):
1940468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    '''Scrolled Grid widgets'''
1941468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis
1942468742878f53bb0a9061e6b167b3150f341fdf1cMartin v. Löwis    # FIXME: It should inherit -superclass tixScrolledWidget
194349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters    def __init__(self, master=None, cnf={}, **kw):
194449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        static= []
194549fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        self.cnf= cnf
194649fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters        TixWidget.__init__(self, master, 'tixScrolledGrid', static, cnf, kw)
1947