blob: f19bf97799c254279d67f9a83e1a3dd04fb9ea9c [file] [log] [blame]
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00002#
3# $Id$
4#
Martin v. Löwisb7b32602001-11-02 23:48:20 +00005# Tix.py -- Tix widget wrappers.
6#
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00007# For Tix, see http://tix.sourceforge.net
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00008#
Moshe Zadka22710822001-03-21 17:24:49 +00009# - Sudhir Shenoy (sshenoy@gol.com), Dec. 1995.
Martin v. Löwisb7b32602001-11-02 23:48:20 +000010# based on an idea of Jean-Marc Lugrin (lugrin@ms.com)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000011#
12# NOTE: In order to minimize changes to Tkinter.py, some of the code here
Moshe Zadka22710822001-03-21 17:24:49 +000013# (TixWidget.__init__) has been taken from Tkinter (Widget.__init__)
14# and will break if there are major changes in Tkinter.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000015#
16# The Tix widgets are represented by a class hierarchy in python with proper
17# inheritance of base classes.
18#
19# As a result after creating a 'w = StdButtonBox', I can write
Moshe Zadka22710822001-03-21 17:24:49 +000020# w.ok['text'] = 'Who Cares'
21# or w.ok['bg'] = w['bg']
22# or even w.ok.invoke()
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000023# etc.
24#
25# Compare the demo tixwidgets.py to the original Tcl program and you will
26# appreciate the advantages.
27#
28
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000029from Tkinter import *
30from Tkinter import _flatten, _cnfmerge, _default_root
31
32# WARNING - TkVersion is a limited precision floating point number
33if TkVersion < 3.999:
34 raise ImportError, "This version of Tix.py requires Tk 4.0 or higher"
35
36import _tkinter # If this fails your Python may not be configured for Tk
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000037
38# Some more constants (for consistency with Tkinter)
39WINDOW = 'window'
40TEXT = 'text'
41STATUS = 'status'
42IMMEDIATE = 'immediate'
43IMAGE = 'image'
44IMAGETEXT = 'imagetext'
45BALLOON = 'balloon'
46AUTO = 'auto'
47ACROSSTOP = 'acrosstop'
48
Fred Drake723293c2001-12-13 04:53:07 +000049# Some constants used by Tkinter dooneevent()
50TCL_DONT_WAIT = 1 << 1
51TCL_WINDOW_EVENTS = 1 << 2
52TCL_FILE_EVENTS = 1 << 3
53TCL_TIMER_EVENTS = 1 << 4
54TCL_IDLE_EVENTS = 1 << 5
55TCL_ALL_EVENTS = 0
56
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000057# BEWARE - this is implemented by copying some code from the Widget class
58# in Tkinter (to override Widget initialization) and is therefore
59# liable to break.
60import Tkinter, os
Martin v. Löwisb7b32602001-11-02 23:48:20 +000061
62# Could probably add this to Tkinter.Misc
63class tixCommand:
Fred Drake723293c2001-12-13 04:53:07 +000064 """The tix commands provide access to miscellaneous elements
Martin v. Löwisb7b32602001-11-02 23:48:20 +000065 of Tix's internal state and the Tix application context.
Fred Drake723293c2001-12-13 04:53:07 +000066 Most of the information manipulated by these commands pertains
67 to the application as a whole, or to a screen or
68 display, rather than to a particular window.
Martin v. Löwisb7b32602001-11-02 23:48:20 +000069
70 This is a mixin class, assumed to be mixed to Tkinter.Tk
71 that supports the self.tk.call method.
72 """
Fred Drake723293c2001-12-13 04:53:07 +000073
Martin v. Löwisb7b32602001-11-02 23:48:20 +000074 def tix_addbitmapdir(self, directory):
Fred Drake723293c2001-12-13 04:53:07 +000075 """Tix maintains a list of directories under which
Martin v. Löwisb7b32602001-11-02 23:48:20 +000076 the tix_getimage and tix_getbitmap commands will
Fred Drake723293c2001-12-13 04:53:07 +000077 search for image files. The standard bitmap directory
78 is $TIX_LIBRARY/bitmaps. The addbitmapdir command
79 adds directory into this list. By using this
Martin v. Löwisb7b32602001-11-02 23:48:20 +000080 command, the image files of an applications can
81 also be located using the tix_getimage or tix_getbitmap
82 command.
83 """
84 return self.tk.call('tix', 'addbitmapdir', directory)
85
86 def tix_cget(self, option):
87 """Returns the current value of the configuration
88 option given by option. Option may be any of the
89 options described in the CONFIGURATION OPTIONS section.
90 """
91 return self.tk.call('tix', 'cget', option)
92
93 def tix_configure(self, cnf=None, **kw):
Fred Drake723293c2001-12-13 04:53:07 +000094 """Query or modify the configuration options of the Tix application
95 context. If no option is specified, returns a dictionary all of the
96 available options. If option is specified with no value, then the
97 command returns a list describing the one named option (this list
98 will be identical to the corresponding sublist of the value
99 returned if no option is specified). If one or more option-value
100 pairs are specified, then the command modifies the given option(s)
101 to have the given value(s); in this case the command returns an
102 empty string. Option may be any of the configuration options.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000103 """
Fred Drake723293c2001-12-13 04:53:07 +0000104 # Copied from Tkinter.py
105 if kw:
106 cnf = _cnfmerge((cnf, kw))
107 elif cnf:
108 cnf = _cnfmerge(cnf)
109 if cnf is None:
110 cnf = {}
111 for x in self.tk.split(self.tk.call('tix', 'configure')):
112 cnf[x[0][1:]] = (x[0][1:],) + x[1:]
113 return cnf
114 if isinstance(cnf, StringType):
115 x = self.tk.split(self.tk.call('tix', 'configure', '-'+cnf))
116 return (x[0][1:],) + x[1:]
117 return self.tk.call(('tix', 'configure') + self._options(cnf))
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000118
119 def tix_filedialog(self, dlgclass=None):
Fred Drake723293c2001-12-13 04:53:07 +0000120 """Returns the file selection dialog that may be shared among
121 different calls from this application. This command will create a
122 file selection dialog widget when it is called the first time. This
123 dialog will be returned by all subsequent calls to tix_filedialog.
124 An optional dlgclass parameter can be passed to specified what type
125 of file selection dialog widget is desired. Possible options are
126 tix FileSelectDialog or tixExFileSelectDialog.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000127 """
128 if dlgclass is not None:
129 return self.tk.call('tix', 'filedialog', dlgclass)
130 else:
131 return self.tk.call('tix', 'filedialog')
132
133 def tix_getbitmap(self, name):
Fred Drake723293c2001-12-13 04:53:07 +0000134 """Locates a bitmap file of the name name.xpm or name in one of the
135 bitmap directories (see the tix_addbitmapdir command above). By
136 using tix_getbitmap, you can avoid hard coding the pathnames of the
137 bitmap files in your application. When successful, it returns the
138 complete pathname of the bitmap file, prefixed with the character
139 '@'. The returned value can be used to configure the -bitmap
140 option of the TK and Tix widgets.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000141 """
142 return self.tk.call('tix', 'getbitmap', name)
143
144 def tix_getimage(self, name):
Fred Drake723293c2001-12-13 04:53:07 +0000145 """Locates an image file of the name name.xpm, name.xbm or name.ppm
146 in one of the bitmap directories (see the addbitmapdir command
147 above). If more than one file with the same name (but different
148 extensions) exist, then the image type is chosen according to the
149 depth of the X display: xbm images are chosen on monochrome
150 displays and color images are chosen on color displays. By using
151 tix_ getimage, you can advoid hard coding the pathnames of the
152 image files in your application. When successful, this command
153 returns the name of the newly created image, which can be used to
154 configure the -image option of the Tk and Tix widgets.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000155 """
156 return self.tk.call('tix', 'getimage', name)
157
158 def tix_option_get(self, name):
159 """Gets the options manitained by the Tix
Fred Drake723293c2001-12-13 04:53:07 +0000160 scheme mechanism. Available options include:
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000161
162 active_bg active_fg bg
163 bold_font dark1_bg dark1_fg
164 dark2_bg dark2_fg disabled_fg
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000165 fg fixed_font font
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000166 inactive_bg inactive_fg input1_bg
167 input2_bg italic_font light1_bg
168 light1_fg light2_bg light2_fg
169 menu_font output1_bg output2_bg
170 select_bg select_fg selector
171 """
172 # could use self.tk.globalgetvar('tixOption', name)
173 return self.tk.call('tix', 'option', 'get', name)
174
175 def tix_resetoptions(self, newScheme, newFontSet, newScmPrio=None):
Fred Drake723293c2001-12-13 04:53:07 +0000176 """Resets the scheme and fontset of the Tix application to
177 newScheme and newFontSet, respectively. This affects only those
178 widgets created after this call. Therefore, it is best to call the
179 resetoptions command before the creation of any widgets in a Tix
180 application.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000181
Fred Drake723293c2001-12-13 04:53:07 +0000182 The optional parameter newScmPrio can be given to reset the
183 priority level of the Tk options set by the Tix schemes.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000184
Fred Drake723293c2001-12-13 04:53:07 +0000185 Because of the way Tk handles the X option database, after Tix has
186 been has imported and inited, it is not possible to reset the color
187 schemes and font sets using the tix config command. Instead, the
188 tix_resetoptions command must be used.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000189 """
190 if newScmPrio is not None:
191 return self.tk.call('tix', 'resetoptions', newScheme, newFontSet, newScmPrio)
192 else:
193 return self.tk.call('tix', 'resetoptions', newScheme, newFontSet)
194
195class Tk(Tkinter.Tk, tixCommand):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000196 """Toplevel widget of Tix which represents mostly the main window
197 of an application. It has an associated Tcl interpreter."""
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000198 def __init__(self, screenName=None, baseName=None, className='Tix'):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000199 Tkinter.Tk.__init__(self, screenName, baseName, className)
Moshe Zadka22710822001-03-21 17:24:49 +0000200 tixlib = os.environ.get('TIX_LIBRARY')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000201 self.tk.eval('global auto_path; lappend auto_path [file dir [info nameof]]')
Moshe Zadka22710822001-03-21 17:24:49 +0000202 if tixlib is not None:
203 self.tk.eval('global auto_path; lappend auto_path {%s}' % tixlib)
204 self.tk.eval('global tcl_pkgPath; lappend tcl_pkgPath {%s}' % tixlib)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000205 # Load Tix - this should work dynamically or statically
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +0000206 # If it's static, tcl/tix8.1/pkgIndex.tcl should have
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000207 # 'load {} Tix'
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +0000208 # If it's dynamic under Unix, tcl/tix8.1/pkgIndex.tcl should have
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000209 # 'load libtix8.1.8.3.so Tix'
Moshe Zadka22710822001-03-21 17:24:49 +0000210 self.tk.eval('package require Tix')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000211
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +0000212 def destroy(self):
213 # For safety, remove an delete_window binding before destroy
214 self.protocol("WM_DELETE_WINDOW", "")
215 Tkinter.Tk.destroy(self)
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000216
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000217# The Tix 'tixForm' geometry manager
218class Form:
219 """The Tix Form geometry manager
220
221 Widgets can be arranged by specifying attachments to other widgets.
222 See Tix documentation for complete details"""
223
224 def config(self, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000225 self.tk.call('tixForm', self._w, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000226
227 form = config
228
229 def __setitem__(self, key, value):
Guido van Rossum49fa2bd2001-08-13 14:12:35 +0000230 Form.form(self, {key: value})
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000231
232 def check(self):
233 return self.tk.call('tixForm', 'check', self._w)
234
235 def forget(self):
236 self.tk.call('tixForm', 'forget', self._w)
237
238 def grid(self, xsize=0, ysize=0):
239 if (not xsize) and (not ysize):
240 x = self.tk.call('tixForm', 'grid', self._w)
241 y = self.tk.splitlist(x)
242 z = ()
243 for x in y:
244 z = z + (self.tk.getint(x),)
245 return z
Martin v. Löwis46874282002-12-06 10:33:45 +0000246 return self.tk.call('tixForm', 'grid', self._w, xsize, ysize)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000247
248 def info(self, option=None):
249 if not option:
250 return self.tk.call('tixForm', 'info', self._w)
251 if option[0] != '-':
252 option = '-' + option
253 return self.tk.call('tixForm', 'info', self._w, option)
254
255 def slaves(self):
256 return map(self._nametowidget,
257 self.tk.splitlist(
258 self.tk.call(
259 'tixForm', 'slaves', self._w)))
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000260
261
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000262
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000263Tkinter.Widget.__bases__ = Tkinter.Widget.__bases__ + (Form,)
264
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000265class TixWidget(Tkinter.Widget):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000266 """A TixWidget class is used to package all (or most) Tix widgets.
267
268 Widget initialization is extended in two ways:
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000269 1) It is possible to give a list of options which must be part of
Moshe Zadka22710822001-03-21 17:24:49 +0000270 the creation command (so called Tix 'static' options). These cannot be
271 given as a 'config' command later.
272 2) It is possible to give the name of an existing TK widget. These are
273 child widgets created automatically by a Tix mega-widget. The Tk call
274 to create these widgets is therefore bypassed in TixWidget.__init__
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000275
276 Both options are for use by subclasses only.
277 """
278 def __init__ (self, master=None, widgetName=None,
Moshe Zadka22710822001-03-21 17:24:49 +0000279 static_options=None, cnf={}, kw={}):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000280 # Merge keywords and dictionary arguments
281 if kw:
Moshe Zadka22710822001-03-21 17:24:49 +0000282 cnf = _cnfmerge((cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000283 else:
284 cnf = _cnfmerge(cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000285
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000286 # Move static options into extra. static_options must be
287 # a list of keywords (or None).
288 extra=()
Neal Norwitzf539bde2002-11-14 02:43:40 +0000289
290 # 'options' is always a static option
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000291 if static_options:
Neal Norwitzf539bde2002-11-14 02:43:40 +0000292 static_options.append('options')
293 else:
294 static_options = ['options']
Raymond Hettingerff41c482003-04-06 09:01:11 +0000295
Neal Norwitzf539bde2002-11-14 02:43:40 +0000296 for k,v in cnf.items()[:]:
297 if k in static_options:
298 extra = extra + ('-' + k, v)
299 del cnf[k]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000300
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000301 self.widgetName = widgetName
302 Widget._setup(self, master, cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000303
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000304 # If widgetName is None, this is a dummy creation call where the
305 # corresponding Tk widget has already been created by Tix
306 if widgetName:
Raymond Hettingerff41c482003-04-06 09:01:11 +0000307 self.tk.call(widgetName, self._w, *extra)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000308
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000309 # Non-static options - to be done via a 'config' command
310 if cnf:
311 Widget.config(self, cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000312
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000313 # Dictionary to hold subwidget names for easier access. We can't
314 # use the children list because the public Tix names may not be the
315 # same as the pathname component
316 self.subwidget_list = {}
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000317
318 # We set up an attribute access function so that it is possible to
319 # do w.ok['text'] = 'Hello' rather than w.subwidget('ok')['text'] = 'Hello'
320 # when w is a StdButtonBox.
321 # We can even do w.ok.invoke() because w.ok is subclassed from the
322 # Button class if you go through the proper constructors
323 def __getattr__(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000324 if self.subwidget_list.has_key(name):
325 return self.subwidget_list[name]
326 raise AttributeError, name
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000327
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000328 def set_silent(self, value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000329 """Set a variable without calling its action routine"""
330 self.tk.call('tixSetSilent', self._w, value)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000331
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000332 def subwidget(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000333 """Return the named subwidget (which must have been created by
334 the sub-class)."""
335 n = self._subwidget_name(name)
336 if not n:
337 raise TclError, "Subwidget " + name + " not child of " + self._name
338 # Remove header of name and leading dot
339 n = n[len(self._w)+1:]
340 return self._nametowidget(n)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000341
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000342 def subwidgets_all(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000343 """Return all subwidgets."""
344 names = self._subwidget_names()
345 if not names:
346 return []
347 retlist = []
348 for name in names:
349 name = name[len(self._w)+1:]
350 try:
351 retlist.append(self._nametowidget(name))
352 except:
353 # some of the widgets are unknown e.g. border in LabelFrame
354 pass
355 return retlist
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000356
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000357 def _subwidget_name(self,name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000358 """Get a subwidget name (returns a String, not a Widget !)"""
359 try:
360 return self.tk.call(self._w, 'subwidget', name)
361 except TclError:
362 return None
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000363
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000364 def _subwidget_names(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000365 """Return the name of all subwidgets."""
366 try:
367 x = self.tk.call(self._w, 'subwidgets', '-all')
368 return self.tk.split(x)
369 except TclError:
370 return None
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000371
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000372 def config_all(self, option, value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000373 """Set configuration options for all subwidgets (and self)."""
374 if option == '':
375 return
376 elif not isinstance(option, StringType):
Walter Dörwald70a6b492004-02-12 17:35:32 +0000377 option = repr(option)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000378 if not isinstance(value, StringType):
Walter Dörwald70a6b492004-02-12 17:35:32 +0000379 value = repr(value)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000380 names = self._subwidget_names()
381 for name in names:
382 self.tk.call(name, 'configure', '-' + option, value)
Neal Norwitz731a9862002-12-10 02:18:49 +0000383 # These are missing from Tkinter
384 def image_create(self, imgtype, cnf={}, master=None, **kw):
385 if not master:
386 master = Tkinter._default_root
387 if not master:
388 raise RuntimeError, 'Too early to create image'
389 if kw and cnf: cnf = _cnfmerge((cnf, kw))
390 elif kw: cnf = kw
391 options = ()
392 for k, v in cnf.items():
393 if callable(v):
394 v = self._register(v)
395 options = options + ('-'+k, v)
396 return master.tk.call(('image', 'create', imgtype,) + options)
397 def image_delete(self, imgname):
398 try:
399 self.tk.call('image', 'delete', imgname)
400 except TclError:
401 # May happen if the root was destroyed
402 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000403
404# Subwidgets are child widgets created automatically by mega-widgets.
405# In python, we have to create these subwidgets manually to mirror their
406# existence in Tk/Tix.
407class TixSubWidget(TixWidget):
408 """Subwidget class.
409
410 This is used to mirror child widgets automatically created
411 by Tix/Tk as part of a mega-widget in Python (which is not informed
412 of this)"""
413
414 def __init__(self, master, name,
Moshe Zadka22710822001-03-21 17:24:49 +0000415 destroy_physically=1, check_intermediate=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000416 if check_intermediate:
417 path = master._subwidget_name(name)
418 try:
419 path = path[len(master._w)+1:]
Neal Norwitzebb41902002-05-31 20:51:31 +0000420 plist = path.split('.')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000421 except:
422 plist = []
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000423
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000424 if (not check_intermediate) or len(plist) < 2:
425 # immediate descendant
426 TixWidget.__init__(self, master, None, None, {'name' : name})
427 else:
428 # Ensure that the intermediate widgets exist
429 parent = master
430 for i in range(len(plist) - 1):
Neal Norwitzebb41902002-05-31 20:51:31 +0000431 n = '.'.join(plist[:i+1])
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000432 try:
433 w = master._nametowidget(n)
434 parent = w
435 except KeyError:
436 # Create the intermediate widget
437 parent = TixSubWidget(parent, plist[i],
Neal Norwitzf539bde2002-11-14 02:43:40 +0000438 destroy_physically=0,
439 check_intermediate=0)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000440 TixWidget.__init__(self, parent, None, None, {'name' : name})
441 self.destroy_physically = destroy_physically
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000442
443 def destroy(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000444 # For some widgets e.g., a NoteBook, when we call destructors,
445 # we must be careful not to destroy the frame widget since this
446 # also destroys the parent NoteBook thus leading to an exception
447 # in Tkinter when it finally calls Tcl to destroy the NoteBook
448 for c in self.children.values(): c.destroy()
449 if self.master.children.has_key(self._name):
450 del self.master.children[self._name]
451 if self.master.subwidget_list.has_key(self._name):
452 del self.master.subwidget_list[self._name]
453 if self.destroy_physically:
454 # This is bypassed only for a few widgets
455 self.tk.call('destroy', self._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000456
457
458# Useful func. to split Tcl lists and return as a dict. From Tkinter.py
459def _lst2dict(lst):
460 dict = {}
461 for x in lst:
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000462 dict[x[0][1:]] = (x[0][1:],) + x[1:]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000463 return dict
464
465# Useful class to create a display style - later shared by many items.
466# Contributed by Steffen Kremser
467class DisplayStyle:
468 """DisplayStyle - handle configuration options shared by
469 (multiple) Display Items"""
470
471 def __init__(self, itemtype, cnf={}, **kw ):
Moshe Zadka22710822001-03-21 17:24:49 +0000472 master = _default_root # global from Tkinter
473 if not master and cnf.has_key('refwindow'): master=cnf['refwindow']
474 elif not master and kw.has_key('refwindow'): master= kw['refwindow']
475 elif not master: raise RuntimeError, "Too early to create display style: no root window"
476 self.tk = master.tk
Raymond Hettingerff41c482003-04-06 09:01:11 +0000477 self.stylename = self.tk.call('tixDisplayStyle', itemtype,
478 *self._options(cnf,kw) )
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000479
480 def __str__(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000481 return self.stylename
482
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000483 def _options(self, cnf, kw ):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000484 if kw and cnf:
485 cnf = _cnfmerge((cnf, kw))
486 elif kw:
487 cnf = kw
488 opts = ()
489 for k, v in cnf.items():
490 opts = opts + ('-'+k, v)
491 return opts
492
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000493 def delete(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000494 self.tk.call(self.stylename, 'delete')
495
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000496 def __setitem__(self,key,value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000497 self.tk.call(self.stylename, 'configure', '-%s'%key, value)
498
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000499 def config(self, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000500 return _lst2dict(
501 self.tk.split(
Raymond Hettingerff41c482003-04-06 09:01:11 +0000502 self.tk.call(
503 self.stylename, 'configure', *self._options(cnf,kw))))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000504
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000505 def __getitem__(self,key):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000506 return self.tk.call(self.stylename, 'cget', '-%s'%key)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000507
508
509######################################################
510### The Tix Widget classes - in alphabetical order ###
511######################################################
512
513class Balloon(TixWidget):
514 """Balloon help widget.
515
Moshe Zadka22710822001-03-21 17:24:49 +0000516 Subwidget Class
517 --------- -----
Fred Drake723293c2001-12-13 04:53:07 +0000518 label Label
519 message Message"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000520
Martin v. Löwis46874282002-12-06 10:33:45 +0000521 # FIXME: It should inherit -superclass tixShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000522 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis652e1912001-11-25 14:50:56 +0000523 # static seem to be -installcolormap -initwait -statusbar -cursor
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000524 static = ['options', 'installcolormap', 'initwait', 'statusbar',
525 'cursor']
526 TixWidget.__init__(self, master, 'tixBalloon', static, cnf, kw)
527 self.subwidget_list['label'] = _dummyLabel(self, 'label',
528 destroy_physically=0)
529 self.subwidget_list['message'] = _dummyLabel(self, 'message',
530 destroy_physically=0)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000531
532 def bind_widget(self, widget, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000533 """Bind balloon widget to another.
534 One balloon widget may be bound to several widgets at the same time"""
Raymond Hettingerff41c482003-04-06 09:01:11 +0000535 self.tk.call(self._w, 'bind', widget._w, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000536
537 def unbind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000538 self.tk.call(self._w, 'unbind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000539
540class ButtonBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000541 """ButtonBox - A container for pushbuttons.
542 Subwidgets are the buttons added with the add method.
543 """
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000544 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000545 TixWidget.__init__(self, master, 'tixButtonBox',
546 ['orientation', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000547
548 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000549 """Add a button with given name to box."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000550
Raymond Hettingerff41c482003-04-06 09:01:11 +0000551 btn = self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000552 self.subwidget_list[name] = _dummyButton(self, name)
553 return btn
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000554
555 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000556 if self.subwidget_list.has_key(name):
557 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000558
559class ComboBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000560 """ComboBox - an Entry field with a dropdown menu. The user can select a
561 choice by either typing in the entry subwdget or selecting from the
562 listbox subwidget.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000563
Moshe Zadka22710822001-03-21 17:24:49 +0000564 Subwidget Class
565 --------- -----
566 entry Entry
567 arrow Button
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000568 slistbox ScrolledListBox
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000569 tick Button
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000570 cross Button : present if created with the fancy option"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000571
Martin v. Löwis46874282002-12-06 10:33:45 +0000572 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000573 def __init__ (self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000574 TixWidget.__init__(self, master, 'tixComboBox',
575 ['editable', 'dropdown', 'fancy', 'options'],
576 cnf, kw)
577 self.subwidget_list['label'] = _dummyLabel(self, 'label')
578 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
579 self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
580 self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
581 'slistbox')
582 try:
583 self.subwidget_list['tick'] = _dummyButton(self, 'tick')
584 self.subwidget_list['cross'] = _dummyButton(self, 'cross')
585 except TypeError:
586 # unavailable when -fancy not specified
587 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000588
Neal Norwitz731a9862002-12-10 02:18:49 +0000589 # align
Raymond Hettingerff41c482003-04-06 09:01:11 +0000590
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000591 def add_history(self, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000592 self.tk.call(self._w, 'addhistory', str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000593
594 def append_history(self, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000595 self.tk.call(self._w, 'appendhistory', str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000596
597 def insert(self, index, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000598 self.tk.call(self._w, 'insert', index, str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000599
600 def pick(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000601 self.tk.call(self._w, 'pick', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000602
603class Control(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000604 """Control - An entry field with value change arrows. The user can
605 adjust the value by pressing the two arrow buttons or by entering
606 the value directly into the entry. The new value will be checked
607 against the user-defined upper and lower limits.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000608
Moshe Zadka22710822001-03-21 17:24:49 +0000609 Subwidget Class
610 --------- -----
611 incr Button
612 decr Button
613 entry Entry
614 label Label"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000615
Martin v. Löwis46874282002-12-06 10:33:45 +0000616 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000617 def __init__ (self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000618 TixWidget.__init__(self, master, 'tixControl', ['options'], cnf, kw)
619 self.subwidget_list['incr'] = _dummyButton(self, 'incr')
620 self.subwidget_list['decr'] = _dummyButton(self, 'decr')
621 self.subwidget_list['label'] = _dummyLabel(self, 'label')
622 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000623
624 def decrement(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000625 self.tk.call(self._w, 'decr')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000626
627 def increment(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000628 self.tk.call(self._w, 'incr')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000629
630 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000631 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000632
633 def update(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000634 self.tk.call(self._w, 'update')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000635
636class DirList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000637 """DirList - displays a list view of a directory, its previous
638 directories and its sub-directories. The user can choose one of
639 the directories displayed in the list or change to another directory.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000640
Moshe Zadka22710822001-03-21 17:24:49 +0000641 Subwidget Class
642 --------- -----
643 hlist HList
644 hsb Scrollbar
645 vsb Scrollbar"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000646
Martin v. Löwis46874282002-12-06 10:33:45 +0000647 # FIXME: It should inherit -superclass tixScrolledHList
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000648 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000649 TixWidget.__init__(self, master, 'tixDirList', ['options'], cnf, kw)
650 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
651 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
652 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000653
654 def chdir(self, dir):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000655 self.tk.call(self._w, 'chdir', dir)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000656
657class DirTree(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000658 """DirTree - Directory Listing in a hierarchical view.
659 Displays a tree view of a directory, its previous directories and its
660 sub-directories. The user can choose one of the directories displayed
661 in the list or change to another directory.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000662
Moshe Zadka22710822001-03-21 17:24:49 +0000663 Subwidget Class
664 --------- -----
Neal Norwitzf539bde2002-11-14 02:43:40 +0000665 hlist HList
666 hsb Scrollbar
667 vsb Scrollbar"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000668
Martin v. Löwis46874282002-12-06 10:33:45 +0000669 # FIXME: It should inherit -superclass tixScrolledHList
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000670 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000671 TixWidget.__init__(self, master, 'tixDirTree', ['options'], cnf, kw)
672 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
673 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
674 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000675
676 def chdir(self, dir):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000677 self.tk.call(self._w, 'chdir', dir)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000678
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000679class DirSelectBox(TixWidget):
680 """DirSelectBox - Motif style file select box.
681 It is generally used for
682 the user to choose a file. FileSelectBox stores the files mostly
683 recently selected into a ComboBox widget so that they can be quickly
684 selected again.
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000685
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000686 Subwidget Class
687 --------- -----
688 selection ComboBox
Neal Norwitzf539bde2002-11-14 02:43:40 +0000689 filter ComboBox
690 dirlist ScrolledListBox
691 filelist ScrolledListBox"""
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000692
693 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000694 TixWidget.__init__(self, master, 'tixDirSelectBox', ['options'], cnf, kw)
695 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
696 self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000697
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000698class ExFileSelectBox(TixWidget):
699 """ExFileSelectBox - MS Windows style file select box.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000700 It provides an convenient method for the user to select files.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000701
Moshe Zadka22710822001-03-21 17:24:49 +0000702 Subwidget Class
703 --------- -----
704 cancel Button
705 ok Button
706 hidden Checkbutton
707 types ComboBox
708 dir ComboBox
709 file ComboBox
710 dirlist ScrolledListBox
711 filelist ScrolledListBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000712
713 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000714 TixWidget.__init__(self, master, 'tixExFileSelectBox', ['options'], cnf, kw)
715 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
716 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
717 self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
718 self.subwidget_list['types'] = _dummyComboBox(self, 'types')
719 self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
720 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
721 self.subwidget_list['file'] = _dummyComboBox(self, 'file')
722 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000723
724 def filter(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000725 self.tk.call(self._w, 'filter')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000726
727 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000728 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000729
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000730
731# Should inherit from a Dialog class
732class DirSelectDialog(TixWidget):
733 """The DirSelectDialog widget presents the directories in the file
734 system in a dialog window. The user can use this dialog window to
735 navigate through the file system to select the desired directory.
736
737 Subwidgets Class
738 ---------- -----
739 dirbox DirSelectDialog"""
740
Martin v. Löwis46874282002-12-06 10:33:45 +0000741 # FIXME: It should inherit -superclass tixDialogShell
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000742 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000743 TixWidget.__init__(self, master, 'tixDirSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000744 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000745 self.subwidget_list['dirbox'] = _dummyDirSelectBox(self, 'dirbox')
746 # cancel and ok buttons are missing
747
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000748 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000749 self.tk.call(self._w, 'popup')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000750
751 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000752 self.tk.call(self._w, 'popdown')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000753
754
755# Should inherit from a Dialog class
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000756class ExFileSelectDialog(TixWidget):
757 """ExFileSelectDialog - MS Windows style file select dialog.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000758 It provides an convenient method for the user to select files.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000759
Moshe Zadka22710822001-03-21 17:24:49 +0000760 Subwidgets Class
761 ---------- -----
762 fsbox ExFileSelectBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000763
Martin v. Löwis46874282002-12-06 10:33:45 +0000764 # FIXME: It should inherit -superclass tixDialogShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000765 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000766 TixWidget.__init__(self, master, 'tixExFileSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000767 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000768 self.subwidget_list['fsbox'] = _dummyExFileSelectBox(self, 'fsbox')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000769
770 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000771 self.tk.call(self._w, 'popup')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000772
773 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000774 self.tk.call(self._w, 'popdown')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000775
776class FileSelectBox(TixWidget):
777 """ExFileSelectBox - Motif style file select box.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000778 It is generally used for
779 the user to choose a file. FileSelectBox stores the files mostly
780 recently selected into a ComboBox widget so that they can be quickly
781 selected again.
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000782
Moshe Zadka22710822001-03-21 17:24:49 +0000783 Subwidget Class
784 --------- -----
785 selection ComboBox
Neal Norwitzf539bde2002-11-14 02:43:40 +0000786 filter ComboBox
787 dirlist ScrolledListBox
788 filelist ScrolledListBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000789
790 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000791 TixWidget.__init__(self, master, 'tixFileSelectBox', ['options'], cnf, kw)
792 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
793 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
794 self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
795 self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000796
Moshe Zadka22710822001-03-21 17:24:49 +0000797 def apply_filter(self): # name of subwidget is same as command
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000798 self.tk.call(self._w, 'filter')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000799
800 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000801 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000802
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000803# Should inherit from a Dialog class
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000804class FileSelectDialog(TixWidget):
805 """FileSelectDialog - Motif style file select dialog.
806
Moshe Zadka22710822001-03-21 17:24:49 +0000807 Subwidgets Class
808 ---------- -----
809 btns StdButtonBox
810 fsbox FileSelectBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000811
Martin v. Löwis46874282002-12-06 10:33:45 +0000812 # FIXME: It should inherit -superclass tixStdDialogShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000813 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000814 TixWidget.__init__(self, master, 'tixFileSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000815 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000816 self.subwidget_list['btns'] = _dummyStdButtonBox(self, 'btns')
817 self.subwidget_list['fsbox'] = _dummyFileSelectBox(self, 'fsbox')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000818
819 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000820 self.tk.call(self._w, 'popup')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000821
822 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000823 self.tk.call(self._w, 'popdown')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000824
825class FileEntry(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000826 """FileEntry - Entry field with button that invokes a FileSelectDialog.
827 The user can type in the filename manually. Alternatively, the user can
828 press the button widget that sits next to the entry, which will bring
829 up a file selection dialog.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000830
Moshe Zadka22710822001-03-21 17:24:49 +0000831 Subwidgets Class
832 ---------- -----
833 button Button
834 entry Entry"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000835
Martin v. Löwis46874282002-12-06 10:33:45 +0000836 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000837 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000838 TixWidget.__init__(self, master, 'tixFileEntry',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000839 ['dialogtype', 'options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000840 self.subwidget_list['button'] = _dummyButton(self, 'button')
841 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000842
843 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000844 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000845
846 def file_dialog(self):
Martin v. Löwis46874282002-12-06 10:33:45 +0000847 # FIXME: return python object
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000848 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000849
850class HList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000851 """HList - Hierarchy display widget can be used to display any data
852 that have a hierarchical structure, for example, file system directory
853 trees. The list entries are indented and connected by branch lines
854 according to their places in the hierachy.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000855
856 Subwidgets - None"""
857
858 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000859 TixWidget.__init__(self, master, 'tixHList',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000860 ['columns', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000861
862 def add(self, entry, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000863 return self.tk.call(self._w, 'add', entry, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000864
865 def add_child(self, parent=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000866 if not parent:
867 parent = ''
Raymond Hettingerff41c482003-04-06 09:01:11 +0000868 return self.tk.call(
869 self._w, 'addchild', parent, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000870
871 def anchor_set(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000872 self.tk.call(self._w, 'anchor', 'set', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000873
874 def anchor_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000875 self.tk.call(self._w, 'anchor', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000876
877 def column_width(self, col=0, width=None, chars=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000878 if not chars:
879 return self.tk.call(self._w, 'column', 'width', col, width)
880 else:
881 return self.tk.call(self._w, 'column', 'width', col,
Neal Norwitzf539bde2002-11-14 02:43:40 +0000882 '-char', chars)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000883
884 def delete_all(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000885 self.tk.call(self._w, 'delete', 'all')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000886
887 def delete_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000888 self.tk.call(self._w, 'delete', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000889
890 def delete_offsprings(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000891 self.tk.call(self._w, 'delete', 'offsprings', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000892
893 def delete_siblings(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000894 self.tk.call(self._w, 'delete', 'siblings', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000895
896 def dragsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000897 self.tk.call(self._w, 'dragsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000898
899 def dragsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000900 self.tk.call(self._w, 'dragsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000901
902 def dropsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000903 self.tk.call(self._w, 'dropsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000904
905 def dropsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000906 self.tk.call(self._w, 'dropsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000907
908 def header_create(self, col, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000909 self.tk.call(self._w, 'header', 'create', col, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000910
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000911 def header_configure(self, col, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000912 if cnf is None:
913 return _lst2dict(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000914 self.tk.split(
915 self.tk.call(self._w, 'header', 'configure', col)))
Raymond Hettingerff41c482003-04-06 09:01:11 +0000916 self.tk.call(self._w, 'header', 'configure', col,
917 *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000918
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000919 def header_cget(self, col, opt):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000920 return self.tk.call(self._w, 'header', 'cget', col, opt)
921
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000922 def header_exists(self, col):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000923 return self.tk.call(self._w, 'header', 'exists', col)
924
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000925 def header_delete(self, col):
Moshe Zadka22710822001-03-21 17:24:49 +0000926 self.tk.call(self._w, 'header', 'delete', col)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000927
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000928 def header_size(self, col):
Moshe Zadka22710822001-03-21 17:24:49 +0000929 return self.tk.call(self._w, 'header', 'size', col)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000930
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000931 def hide_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000932 self.tk.call(self._w, 'hide', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000933
934 def indicator_create(self, entry, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000935 self.tk.call(
936 self._w, 'indicator', 'create', entry, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000937
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000938 def indicator_configure(self, entry, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000939 if cnf is None:
940 return _lst2dict(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000941 self.tk.split(
942 self.tk.call(self._w, 'indicator', 'configure', entry)))
Raymond Hettingerff41c482003-04-06 09:01:11 +0000943 self.tk.call(
944 self._w, 'indicator', 'configure', entry, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000945
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000946 def indicator_cget(self, entry, opt):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000947 return self.tk.call(self._w, 'indicator', 'cget', entry, opt)
948
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000949 def indicator_exists(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000950 return self.tk.call (self._w, 'indicator', 'exists', entry)
951
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000952 def indicator_delete(self, entry):
Moshe Zadka22710822001-03-21 17:24:49 +0000953 self.tk.call(self._w, 'indicator', 'delete', entry)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000954
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000955 def indicator_size(self, entry):
Moshe Zadka22710822001-03-21 17:24:49 +0000956 return self.tk.call(self._w, 'indicator', 'size', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000957
958 def info_anchor(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000959 return self.tk.call(self._w, 'info', 'anchor')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000960
961 def info_children(self, entry=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000962 c = self.tk.call(self._w, 'info', 'children', entry)
963 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000964
965 def info_data(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000966 return self.tk.call(self._w, 'info', 'data', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000967
968 def info_exists(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000969 return self.tk.call(self._w, 'info', 'exists', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000970
971 def info_hidden(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000972 return self.tk.call(self._w, 'info', 'hidden', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000973
974 def info_next(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000975 return self.tk.call(self._w, 'info', 'next', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000976
977 def info_parent(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000978 return self.tk.call(self._w, 'info', 'parent', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000979
980 def info_prev(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000981 return self.tk.call(self._w, 'info', 'prev', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000982
983 def info_selection(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000984 c = self.tk.call(self._w, 'info', 'selection')
985 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000986
Martin v. Löwis3e048482001-10-09 11:50:55 +0000987 def item_cget(self, entry, col, opt):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000988 return self.tk.call(self._w, 'item', 'cget', entry, col, opt)
989
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000990 def item_configure(self, entry, col, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000991 if cnf is None:
992 return _lst2dict(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000993 self.tk.split(
994 self.tk.call(self._w, 'item', 'configure', entry, col)))
Raymond Hettingerff41c482003-04-06 09:01:11 +0000995 self.tk.call(self._w, 'item', 'configure', entry, col,
996 *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000997
998 def item_create(self, entry, col, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000999 self.tk.call(
1000 self._w, 'item', 'create', entry, col, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001001
1002 def item_exists(self, entry, col):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001003 return self.tk.call(self._w, 'item', 'exists', entry, col)
1004
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001005 def item_delete(self, entry, col):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001006 self.tk.call(self._w, 'item', 'delete', entry, col)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001007
Martin v. Löwis433fa692004-03-21 15:26:44 +00001008 def entrycget(self, entry, opt):
1009 return self.tk.call(self._w, 'entrycget', entry, opt)
1010
1011 def entryconfigure(self, entry, cnf={}, **kw):
1012 if cnf is None:
1013 return _lst2dict(
1014 self.tk.split(
1015 self.tk.call(self._w, 'entryconfigure', entry)))
1016 self.tk.call(self._w, 'entryconfigure', entry,
1017 *self._options(cnf, kw))
1018
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001019 def nearest(self, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001020 return self.tk.call(self._w, 'nearest', y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001021
1022 def see(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001023 self.tk.call(self._w, 'see', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001024
1025 def selection_clear(self, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001026 self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001027
1028 def selection_includes(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001029 return self.tk.call(self._w, 'selection', 'includes', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001030
1031 def selection_set(self, first, last=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001032 self.tk.call(self._w, 'selection', 'set', first, last)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001033
1034 def show_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001035 return self.tk.call(self._w, 'show', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001036
1037 def xview(self, *args):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001038 self.tk.call(self._w, 'xview', *args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001039
1040 def yview(self, *args):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001041 self.tk.call(self._w, 'yview', *args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001042
1043class InputOnly(TixWidget):
Martin v. Löwis46874282002-12-06 10:33:45 +00001044 """InputOnly - Invisible widget. Unix only.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001045
1046 Subwidgets - None"""
1047
1048 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001049 TixWidget.__init__(self, master, 'tixInputOnly', None, cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001050
1051class LabelEntry(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001052 """LabelEntry - Entry field with label. Packages an entry widget
1053 and a label into one mega widget. It can beused be used to simplify
1054 the creation of ``entry-form'' type of interface.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001055
Moshe Zadka22710822001-03-21 17:24:49 +00001056 Subwidgets Class
1057 ---------- -----
1058 label Label
1059 entry Entry"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001060
1061 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001062 TixWidget.__init__(self, master, 'tixLabelEntry',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001063 ['labelside','options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001064 self.subwidget_list['label'] = _dummyLabel(self, 'label')
1065 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001066
1067class LabelFrame(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001068 """LabelFrame - Labelled Frame container. Packages a frame widget
1069 and a label into one mega widget. To create widgets inside a
1070 LabelFrame widget, one creates the new widgets relative to the
1071 frame subwidget and manage them inside the frame subwidget.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001072
Moshe Zadka22710822001-03-21 17:24:49 +00001073 Subwidgets Class
1074 ---------- -----
1075 label Label
1076 frame Frame"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001077
1078 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001079 TixWidget.__init__(self, master, 'tixLabelFrame',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001080 ['labelside','options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001081 self.subwidget_list['label'] = _dummyLabel(self, 'label')
1082 self.subwidget_list['frame'] = _dummyFrame(self, 'frame')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001083
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001084
1085class ListNoteBook(TixWidget):
1086 """A ListNoteBook widget is very similar to the TixNoteBook widget:
1087 it can be used to display many windows in a limited space using a
1088 notebook metaphor. The notebook is divided into a stack of pages
1089 (windows). At one time only one of these pages can be shown.
1090 The user can navigate through these pages by
1091 choosing the name of the desired page in the hlist subwidget."""
1092
1093 def __init__(self, master, cnf={}, **kw):
Neal Norwitzf539bde2002-11-14 02:43:40 +00001094 TixWidget.__init__(self, master, 'tixListNoteBook', ['options'], cnf, kw)
1095 # Is this necessary? It's not an exposed subwidget in Tix.
1096 self.subwidget_list['pane'] = _dummyPanedWindow(self, 'pane',
1097 destroy_physically=0)
1098 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1099 self.subwidget_list['shlist'] = _dummyScrolledHList(self, 'shlist')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001100
1101 def add(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001102 self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001103 self.subwidget_list[name] = TixSubWidget(self, name)
1104 return self.subwidget_list[name]
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001105
Martin v. Löwis01824bf2002-09-19 08:12:55 +00001106 def page(self, name):
1107 return self.subwidget(name)
1108
1109 def pages(self):
1110 # Can't call subwidgets_all directly because we don't want .nbframe
1111 names = self.tk.split(self.tk.call(self._w, 'pages'))
1112 ret = []
1113 for x in names:
1114 ret.append(self.subwidget(x))
1115 return ret
1116
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001117 def raise_page(self, name): # raise is a python keyword
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001118 self.tk.call(self._w, 'raise', name)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001119
1120class Meter(TixWidget):
1121 """The Meter widget can be used to show the progress of a background
1122 job which may take a long time to execute.
1123 """
1124
1125 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001126 TixWidget.__init__(self, master, 'tixMeter',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001127 ['options'], cnf, kw)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001128
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001129class NoteBook(TixWidget):
1130 """NoteBook - Multi-page container widget (tabbed notebook metaphor).
1131
Moshe Zadka22710822001-03-21 17:24:49 +00001132 Subwidgets Class
1133 ---------- -----
1134 nbframe NoteBookFrame
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001135 <pages> page widgets added dynamically with the add method"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001136
1137 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001138 TixWidget.__init__(self,master,'tixNoteBook', ['options'], cnf, kw)
1139 self.subwidget_list['nbframe'] = TixSubWidget(self, 'nbframe',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001140 destroy_physically=0)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001141
1142 def add(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001143 self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001144 self.subwidget_list[name] = TixSubWidget(self, name)
1145 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001146
1147 def delete(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001148 self.tk.call(self._w, 'delete', name)
1149 self.subwidget_list[name].destroy()
1150 del self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001151
1152 def page(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001153 return self.subwidget(name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001154
1155 def pages(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001156 # Can't call subwidgets_all directly because we don't want .nbframe
1157 names = self.tk.split(self.tk.call(self._w, 'pages'))
1158 ret = []
1159 for x in names:
1160 ret.append(self.subwidget(x))
1161 return ret
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001162
Moshe Zadka22710822001-03-21 17:24:49 +00001163 def raise_page(self, name): # raise is a python keyword
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001164 self.tk.call(self._w, 'raise', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001165
1166 def raised(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001167 return self.tk.call(self._w, 'raised')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001168
1169class NoteBookFrame(TixWidget):
Martin v. Löwis46874282002-12-06 10:33:45 +00001170 # FIXME: This is dangerous to expose to be called on its own.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001171 pass
1172
1173class OptionMenu(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001174 """OptionMenu - creates a menu button of options.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001175
Moshe Zadka22710822001-03-21 17:24:49 +00001176 Subwidget Class
1177 --------- -----
Neal Norwitzf539bde2002-11-14 02:43:40 +00001178 menubutton Menubutton
1179 menu Menu"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001180
1181 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001182 TixWidget.__init__(self, master, 'tixOptionMenu', ['options'], cnf, kw)
1183 self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
1184 self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001185
1186 def add_command(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001187 self.tk.call(self._w, 'add', 'command', name, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001188
1189 def add_separator(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001190 self.tk.call(self._w, 'add', 'separator', name, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001191
1192 def delete(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001193 self.tk.call(self._w, 'delete', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001194
1195 def disable(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001196 self.tk.call(self._w, 'disable', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001197
1198 def enable(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001199 self.tk.call(self._w, 'enable', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001200
1201class PanedWindow(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001202 """PanedWindow - Multi-pane container widget
1203 allows the user to interactively manipulate the sizes of several
1204 panes. The panes can be arranged either vertically or horizontally.The
1205 user changes the sizes of the panes by dragging the resize handle
1206 between two panes.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001207
Moshe Zadka22710822001-03-21 17:24:49 +00001208 Subwidgets Class
1209 ---------- -----
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001210 <panes> g/p widgets added dynamically with the add method."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001211
1212 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001213 TixWidget.__init__(self, master, 'tixPanedWindow', ['orientation', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001214
Neal Norwitzf539bde2002-11-14 02:43:40 +00001215 # add delete forget panecget paneconfigure panes setsize
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001216 def add(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001217 self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001218 self.subwidget_list[name] = TixSubWidget(self, name,
Neal Norwitzf539bde2002-11-14 02:43:40 +00001219 check_intermediate=0)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001220 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001221
Neal Norwitzf539bde2002-11-14 02:43:40 +00001222 def delete(self, name):
1223 self.tk.call(self._w, 'delete', name)
1224 self.subwidget_list[name].destroy()
1225 del self.subwidget_list[name]
1226
1227 def forget(self, name):
1228 self.tk.call(self._w, 'forget', name)
1229
1230 def panecget(self, entry, opt):
1231 return self.tk.call(self._w, 'panecget', entry, opt)
1232
1233 def paneconfigure(self, entry, cnf={}, **kw):
1234 if cnf is None:
1235 return _lst2dict(
1236 self.tk.split(
1237 self.tk.call(self._w, 'paneconfigure', entry)))
Raymond Hettingerff41c482003-04-06 09:01:11 +00001238 self.tk.call(self._w, 'paneconfigure', entry, *self._options(cnf, kw))
Neal Norwitzf539bde2002-11-14 02:43:40 +00001239
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001240 def panes(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001241 names = self.tk.call(self._w, 'panes')
1242 ret = []
1243 for x in names:
1244 ret.append(self.subwidget(x))
1245 return ret
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001246
1247class PopupMenu(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001248 """PopupMenu widget can be used as a replacement of the tk_popup command.
1249 The advantage of the Tix PopupMenu widget is it requires less application
1250 code to manipulate.
1251
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001252
Moshe Zadka22710822001-03-21 17:24:49 +00001253 Subwidgets Class
1254 ---------- -----
1255 menubutton Menubutton
1256 menu Menu"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001257
Martin v. Löwis46874282002-12-06 10:33:45 +00001258 # FIXME: It should inherit -superclass tixShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001259 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001260 TixWidget.__init__(self, master, 'tixPopupMenu', ['options'], cnf, kw)
1261 self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
1262 self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001263
1264 def bind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001265 self.tk.call(self._w, 'bind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001266
1267 def unbind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001268 self.tk.call(self._w, 'unbind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001269
1270 def post_widget(self, widget, x, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001271 self.tk.call(self._w, 'post', widget._w, x, y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001272
1273class ResizeHandle(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001274 """Internal widget to draw resize handles on Scrolled widgets."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001275 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001276 # There seems to be a Tix bug rejecting the configure method
1277 # Let's try making the flags -static
1278 flags = ['options', 'command', 'cursorfg', 'cursorbg',
1279 'handlesize', 'hintcolor', 'hintwidth',
1280 'x', 'y']
1281 # In fact, x y height width are configurable
1282 TixWidget.__init__(self, master, 'tixResizeHandle',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001283 flags, cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001284
1285 def attach_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001286 self.tk.call(self._w, 'attachwidget', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001287
Martin v. Löwis652e1912001-11-25 14:50:56 +00001288 def detach_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001289 self.tk.call(self._w, 'detachwidget', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001290
1291 def hide(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001292 self.tk.call(self._w, 'hide', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001293
1294 def show(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001295 self.tk.call(self._w, 'show', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001296
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001297class ScrolledHList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001298 """ScrolledHList - HList with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001299
Martin v. Löwis46874282002-12-06 10:33:45 +00001300 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001301 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001302 TixWidget.__init__(self, master, 'tixScrolledHList', ['options'],
Neal Norwitzf539bde2002-11-14 02:43:40 +00001303 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001304 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1305 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1306 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001307
1308class ScrolledListBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001309 """ScrolledListBox - Listbox with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001310
Martin v. Löwis46874282002-12-06 10:33:45 +00001311 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001312 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001313 TixWidget.__init__(self, master, 'tixScrolledListBox', ['options'], cnf, kw)
1314 self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
1315 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1316 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001317
1318class ScrolledText(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001319 """ScrolledText - Text with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001320
Martin v. Löwis46874282002-12-06 10:33:45 +00001321 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001322 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001323 TixWidget.__init__(self, master, 'tixScrolledText', ['options'], cnf, kw)
1324 self.subwidget_list['text'] = _dummyText(self, 'text')
1325 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1326 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001327
1328class ScrolledTList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001329 """ScrolledTList - TList with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001330
Martin v. Löwis46874282002-12-06 10:33:45 +00001331 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001332 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001333 TixWidget.__init__(self, master, 'tixScrolledTList', ['options'],
Neal Norwitzf539bde2002-11-14 02:43:40 +00001334 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001335 self.subwidget_list['tlist'] = _dummyTList(self, 'tlist')
1336 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1337 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001338
1339class ScrolledWindow(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001340 """ScrolledWindow - Window with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001341
Martin v. Löwis46874282002-12-06 10:33:45 +00001342 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001343 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001344 TixWidget.__init__(self, master, 'tixScrolledWindow', ['options'], cnf, kw)
1345 self.subwidget_list['window'] = _dummyFrame(self, 'window')
1346 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1347 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001348
1349class Select(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001350 """Select - Container of button subwidgets. It can be used to provide
1351 radio-box or check-box style of selection options for the user.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001352
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001353 Subwidgets are buttons added dynamically using the add method."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001354
Martin v. Löwis46874282002-12-06 10:33:45 +00001355 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001356 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001357 TixWidget.__init__(self, master, 'tixSelect',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001358 ['allowzero', 'radio', 'orientation', 'labelside',
1359 'options'],
1360 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001361 self.subwidget_list['label'] = _dummyLabel(self, 'label')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001362
1363 def add(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001364 self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001365 self.subwidget_list[name] = _dummyButton(self, name)
1366 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001367
1368 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001369 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001370
Neal Norwitzf539bde2002-11-14 02:43:40 +00001371class Shell(TixWidget):
1372 """Toplevel window.
1373
1374 Subwidgets - None"""
1375
1376 def __init__ (self,master=None,cnf={}, **kw):
1377 TixWidget.__init__(self, master, 'tixShell', ['options', 'title'], cnf, kw)
1378
1379class DialogShell(TixWidget):
1380 """Toplevel window, with popup popdown and center methods.
1381 It tells the window manager that it is a dialog window and should be
1382 treated specially. The exact treatment depends on the treatment of
1383 the window manager.
1384
1385 Subwidgets - None"""
1386
Martin v. Löwis46874282002-12-06 10:33:45 +00001387 # FIXME: It should inherit from Shell
Neal Norwitzf539bde2002-11-14 02:43:40 +00001388 def __init__ (self,master=None,cnf={}, **kw):
1389 TixWidget.__init__(self, master,
1390 'tixDialogShell',
1391 ['options', 'title', 'mapped',
1392 'minheight', 'minwidth',
1393 'parent', 'transient'], cnf, kw)
1394
1395 def popdown(self):
1396 self.tk.call(self._w, 'popdown')
1397
1398 def popup(self):
1399 self.tk.call(self._w, 'popup')
1400
1401 def center(self):
1402 self.tk.call(self._w, 'center')
1403
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001404class StdButtonBox(TixWidget):
1405 """StdButtonBox - Standard Button Box (OK, Apply, Cancel and Help) """
1406
1407 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001408 TixWidget.__init__(self, master, 'tixStdButtonBox',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001409 ['orientation', 'options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001410 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1411 self.subwidget_list['apply'] = _dummyButton(self, 'apply')
1412 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1413 self.subwidget_list['help'] = _dummyButton(self, 'help')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001414
1415 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001416 if self.subwidget_list.has_key(name):
1417 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001418
1419class TList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001420 """TList - Hierarchy display widget which can be
1421 used to display data in a tabular format. The list entries of a TList
1422 widget are similar to the entries in the Tk listbox widget. The main
1423 differences are (1) the TList widget can display the list entries in a
1424 two dimensional format and (2) you can use graphical images as well as
1425 multiple colors and fonts for the list entries.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001426
1427 Subwidgets - None"""
1428
1429 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001430 TixWidget.__init__(self, master, 'tixTList', ['options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001431
1432 def active_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001433 self.tk.call(self._w, 'active', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001434
1435 def active_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001436 self.tk.call(self._w, 'active', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001437
1438 def anchor_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001439 self.tk.call(self._w, 'anchor', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001440
1441 def anchor_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001442 self.tk.call(self._w, 'anchor', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001443
1444 def delete(self, from_, to=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001445 self.tk.call(self._w, 'delete', from_, to)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001446
1447 def dragsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001448 self.tk.call(self._w, 'dragsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001449
1450 def dragsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001451 self.tk.call(self._w, 'dragsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001452
1453 def dropsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001454 self.tk.call(self._w, 'dropsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001455
1456 def dropsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001457 self.tk.call(self._w, 'dropsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001458
1459 def insert(self, index, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001460 self.tk.call(self._w, 'insert', index, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001461
1462 def info_active(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001463 return self.tk.call(self._w, 'info', 'active')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001464
1465 def info_anchor(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001466 return self.tk.call(self._w, 'info', 'anchor')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001467
1468 def info_down(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001469 return self.tk.call(self._w, 'info', 'down', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001470
1471 def info_left(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001472 return self.tk.call(self._w, 'info', 'left', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001473
1474 def info_right(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001475 return self.tk.call(self._w, 'info', 'right', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001476
1477 def info_selection(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001478 c = self.tk.call(self._w, 'info', 'selection')
1479 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001480
1481 def info_size(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001482 return self.tk.call(self._w, 'info', 'size')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001483
1484 def info_up(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001485 return self.tk.call(self._w, 'info', 'up', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001486
1487 def nearest(self, x, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001488 return self.tk.call(self._w, 'nearest', x, y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001489
1490 def see(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001491 self.tk.call(self._w, 'see', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001492
1493 def selection_clear(self, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001494 self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001495
1496 def selection_includes(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001497 return self.tk.call(self._w, 'selection', 'includes', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001498
1499 def selection_set(self, first, last=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001500 self.tk.call(self._w, 'selection', 'set', first, last)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001501
1502 def xview(self, *args):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001503 self.tk.call(self._w, 'xview', *args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001504
1505 def yview(self, *args):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001506 self.tk.call(self._w, 'yview', *args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001507
1508class Tree(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001509 """Tree - The tixTree widget can be used to display hierachical
1510 data in a tree form. The user can adjust
1511 the view of the tree by opening or closing parts of the tree."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001512
Martin v. Löwis46874282002-12-06 10:33:45 +00001513 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001514 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001515 TixWidget.__init__(self, master, 'tixTree',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001516 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001517 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1518 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1519 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001520
1521 def autosetmode(self):
Martin v. Löwis46874282002-12-06 10:33:45 +00001522 '''This command calls the setmode method for all the entries in this
1523 Tree widget: if an entry has no child entries, its mode is set to
1524 none. Otherwise, if the entry has any hidden child entries, its mode is
1525 set to open; otherwise its mode is set to close.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001526 self.tk.call(self._w, 'autosetmode')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001527
1528 def close(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001529 '''Close the entry given by entryPath if its mode is close.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001530 self.tk.call(self._w, 'close', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001531
1532 def getmode(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001533 '''Returns the current mode of the entry given by entryPath.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001534 return self.tk.call(self._w, 'getmode', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001535
1536 def open(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001537 '''Open the entry given by entryPath if its mode is open.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001538 self.tk.call(self._w, 'open', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001539
1540 def setmode(self, entrypath, mode='none'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001541 '''This command is used to indicate whether the entry given by
1542 entryPath has children entries and whether the children are visible. mode
1543 must be one of open, close or none. If mode is set to open, a (+)
1544 indicator is drawn next the the entry. If mode is set to close, a (-)
1545 indicator is drawn next the the entry. If mode is set to none, no
1546 indicators will be drawn for this entry. The default mode is none. The
1547 open mode indicates the entry has hidden children and this entry can be
1548 opened by the user. The close mode indicates that all the children of the
1549 entry are now visible and the entry can be closed by the user.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001550 self.tk.call(self._w, 'setmode', entrypath, mode)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001551
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001552
1553# Could try subclassing Tree for CheckList - would need another arg to init
1554class CheckList(TixWidget):
1555 """The CheckList widget
1556 displays a list of items to be selected by the user. CheckList acts
1557 similarly to the Tk checkbutton or radiobutton widgets, except it is
1558 capable of handling many more items than checkbuttons or radiobuttons.
1559 """
Martin v. Löwis46874282002-12-06 10:33:45 +00001560 # FIXME: It should inherit -superclass tixTree
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001561 def __init__(self, master=None, cnf={}, **kw):
1562 TixWidget.__init__(self, master, 'tixCheckList',
1563 ['options'], cnf, kw)
1564 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1565 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1566 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001567
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001568 def autosetmode(self):
Martin v. Löwis46874282002-12-06 10:33:45 +00001569 '''This command calls the setmode method for all the entries in this
1570 Tree widget: if an entry has no child entries, its mode is set to
1571 none. Otherwise, if the entry has any hidden child entries, its mode is
1572 set to open; otherwise its mode is set to close.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001573 self.tk.call(self._w, 'autosetmode')
1574
1575 def close(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001576 '''Close the entry given by entryPath if its mode is close.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001577 self.tk.call(self._w, 'close', entrypath)
1578
1579 def getmode(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001580 '''Returns the current mode of the entry given by entryPath.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001581 return self.tk.call(self._w, 'getmode', entrypath)
1582
1583 def open(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001584 '''Open the entry given by entryPath if its mode is open.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001585 self.tk.call(self._w, 'open', entrypath)
1586
1587 def getselection(self, mode='on'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001588 '''Returns a list of items whose status matches status. If status is
1589 not specified, the list of items in the "on" status will be returned.
1590 Mode can be on, off, default'''
1591 c = self.tk.split(self.tk.call(self._w, 'getselection', mode))
1592 return self.tk.splitlist(c)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001593
1594 def getstatus(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001595 '''Returns the current status of entryPath.'''
1596 return self.tk.call(self._w, 'getstatus', entrypath)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001597
1598 def setstatus(self, entrypath, mode='on'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001599 '''Sets the status of entryPath to be status. A bitmap will be
1600 displayed next to the entry its status is on, off or default.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001601 self.tk.call(self._w, 'setstatus', entrypath, mode)
1602
1603
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001604###########################################################################
1605### The subclassing below is used to instantiate the subwidgets in each ###
1606### mega widget. This allows us to access their methods directly. ###
1607###########################################################################
1608
1609class _dummyButton(Button, TixSubWidget):
1610 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001611 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001612
1613class _dummyCheckbutton(Checkbutton, TixSubWidget):
1614 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001615 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001616
1617class _dummyEntry(Entry, TixSubWidget):
1618 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001619 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001620
1621class _dummyFrame(Frame, TixSubWidget):
1622 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001623 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001624
1625class _dummyLabel(Label, TixSubWidget):
1626 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001627 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001628
1629class _dummyListbox(Listbox, TixSubWidget):
1630 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001631 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001632
1633class _dummyMenu(Menu, TixSubWidget):
1634 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001635 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001636
1637class _dummyMenubutton(Menubutton, TixSubWidget):
1638 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001639 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001640
1641class _dummyScrollbar(Scrollbar, TixSubWidget):
1642 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001643 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001644
1645class _dummyText(Text, TixSubWidget):
1646 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001647 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001648
1649class _dummyScrolledListBox(ScrolledListBox, TixSubWidget):
1650 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001651 TixSubWidget.__init__(self, master, name, destroy_physically)
1652 self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
1653 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1654 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001655
1656class _dummyHList(HList, TixSubWidget):
1657 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001658 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001659
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001660class _dummyScrolledHList(ScrolledHList, TixSubWidget):
1661 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001662 TixSubWidget.__init__(self, master, name, destroy_physically)
1663 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1664 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1665 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001666
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001667class _dummyTList(TList, TixSubWidget):
1668 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001669 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001670
1671class _dummyComboBox(ComboBox, TixSubWidget):
1672 def __init__(self, master, name, destroy_physically=1):
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001673 TixSubWidget.__init__(self, master, name, ['fancy',destroy_physically])
1674 self.subwidget_list['label'] = _dummyLabel(self, 'label')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001675 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
1676 self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001677
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001678 self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001679 'slistbox')
1680 try:
1681 self.subwidget_list['tick'] = _dummyButton(self, 'tick')
1682 #cross Button : present if created with the fancy option
1683 self.subwidget_list['cross'] = _dummyButton(self, 'cross')
1684 except TypeError:
1685 # unavailable when -fancy not specified
1686 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001687
1688class _dummyDirList(DirList, TixSubWidget):
1689 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001690 TixSubWidget.__init__(self, master, name, destroy_physically)
1691 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1692 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1693 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001694
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001695class _dummyDirSelectBox(DirSelectBox, TixSubWidget):
1696 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001697 TixSubWidget.__init__(self, master, name, destroy_physically)
1698 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
1699 self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001700
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001701class _dummyExFileSelectBox(ExFileSelectBox, TixSubWidget):
1702 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001703 TixSubWidget.__init__(self, master, name, destroy_physically)
1704 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1705 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1706 self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
1707 self.subwidget_list['types'] = _dummyComboBox(self, 'types')
1708 self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
1709 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
1710 self.subwidget_list['file'] = _dummyComboBox(self, 'file')
1711 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001712
1713class _dummyFileSelectBox(FileSelectBox, TixSubWidget):
1714 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001715 TixSubWidget.__init__(self, master, name, destroy_physically)
1716 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
1717 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
1718 self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
1719 self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001720
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001721class _dummyFileComboBox(ComboBox, TixSubWidget):
1722 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001723 TixSubWidget.__init__(self, master, name, destroy_physically)
1724 self.subwidget_list['dircbx'] = _dummyComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001725
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001726class _dummyStdButtonBox(StdButtonBox, TixSubWidget):
1727 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001728 TixSubWidget.__init__(self, master, name, destroy_physically)
1729 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1730 self.subwidget_list['apply'] = _dummyButton(self, 'apply')
1731 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1732 self.subwidget_list['help'] = _dummyButton(self, 'help')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001733
1734class _dummyNoteBookFrame(NoteBookFrame, TixSubWidget):
1735 def __init__(self, master, name, destroy_physically=0):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001736 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001737
Martin v. Löwis01824bf2002-09-19 08:12:55 +00001738class _dummyPanedWindow(PanedWindow, TixSubWidget):
1739 def __init__(self, master, name, destroy_physically=1):
1740 TixSubWidget.__init__(self, master, name, destroy_physically)
1741
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001742########################
1743### Utility Routines ###
1744########################
1745
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001746#mike Should tixDestroy be exposed as a wrapper? - but not for widgets.
1747
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001748def OptionName(widget):
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001749 '''Returns the qualified path name for the widget. Normally used to set
1750 default options for subwidgets. See tixwidgets.py'''
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001751 return widget.tk.call('tixOptionName', widget._w)
1752
1753# Called with a dictionary argument of the form
1754# {'*.c':'C source files', '*.txt':'Text Files', '*':'All files'}
1755# returns a string which can be used to configure the fsbox file types
1756# in an ExFileSelectBox. i.e.,
1757# '{{*} {* - All files}} {{*.c} {*.c - C source files}} {{*.txt} {*.txt - Text Files}}'
1758def FileTypeList(dict):
1759 s = ''
1760 for type in dict.keys():
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001761 s = s + '{{' + type + '} {' + type + ' - ' + dict[type] + '}} '
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001762 return s
1763
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001764# Still to be done:
Martin v. Löwis46874282002-12-06 10:33:45 +00001765# tixIconView
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001766class CObjView(TixWidget):
1767 """This file implements the Canvas Object View widget. This is a base
1768 class of IconView. It implements automatic placement/adjustment of the
1769 scrollbars according to the canvas objects inside the canvas subwidget.
1770 The scrollbars are adjusted so that the canvas is just large enough
1771 to see all the objects.
1772 """
Martin v. Löwis46874282002-12-06 10:33:45 +00001773 # FIXME: It should inherit -superclass tixScrolledWidget
1774 pass
1775
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001776class Grid(TixWidget):
1777 '''The Tix Grid command creates a new window and makes it into a
1778 tixGrid widget. Additional options, may be specified on the command
1779 line or in the option database to configure aspects such as its cursor
1780 and relief.
1781
1782 A Grid widget displays its contents in a two dimensional grid of cells.
1783 Each cell may contain one Tix display item, which may be in text,
1784 graphics or other formats. See the DisplayStyle class for more information
1785 about Tix display items. Individual cells, or groups of cells, can be
1786 formatted with a wide range of attributes, such as its color, relief and
1787 border.
1788
1789 Subwidgets - None'''
1790 pass
1791
1792 # def anchor option ?args ...?
1793 # def bdtype
1794 # def delete dim from ?to?
1795 # def edit apply
1796 # def edit set x y
1797 # def entrycget x y option
1798 # def entryconfigure x y ?option? ?value option value ...?
1799 # def format
1800 # def index
1801 # def move dim from to offset
1802 # def set x y ?-itemtype type? ?option value...?
1803 # def size dim index ?option value ...?
1804 # def unset x y
1805 # def xview
1806 # def yview
Raymond Hettingerff41c482003-04-06 09:01:11 +00001807
Martin v. Löwis46874282002-12-06 10:33:45 +00001808class ScrolledGrid(TixWidget):
1809 '''Scrolled Grid widgets'''
1810
1811 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001812 pass