blob: 57593568b7d5753c24ffc4318624c0f45810c1dd [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
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000206 # If it's static, lib/tix8.1/pkgIndex.tcl should have
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000207 # 'load {} Tix'
Fred Drake723293c2001-12-13 04:53:07 +0000208 # If it's dynamic under Unix, lib/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
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000212
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000213# The Tix 'tixForm' geometry manager
214class Form:
215 """The Tix Form geometry manager
216
217 Widgets can be arranged by specifying attachments to other widgets.
218 See Tix documentation for complete details"""
219
220 def config(self, cnf={}, **kw):
221 apply(self.tk.call, ('tixForm', self._w) + self._options(cnf, kw))
222
223 form = config
224
225 def __setitem__(self, key, value):
Guido van Rossum49fa2bd2001-08-13 14:12:35 +0000226 Form.form(self, {key: value})
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000227
228 def check(self):
229 return self.tk.call('tixForm', 'check', self._w)
230
231 def forget(self):
232 self.tk.call('tixForm', 'forget', self._w)
233
234 def grid(self, xsize=0, ysize=0):
235 if (not xsize) and (not ysize):
236 x = self.tk.call('tixForm', 'grid', self._w)
237 y = self.tk.splitlist(x)
238 z = ()
239 for x in y:
240 z = z + (self.tk.getint(x),)
241 return z
Martin v. Löwis46874282002-12-06 10:33:45 +0000242 return self.tk.call('tixForm', 'grid', self._w, xsize, ysize)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000243
244 def info(self, option=None):
245 if not option:
246 return self.tk.call('tixForm', 'info', self._w)
247 if option[0] != '-':
248 option = '-' + option
249 return self.tk.call('tixForm', 'info', self._w, option)
250
251 def slaves(self):
252 return map(self._nametowidget,
253 self.tk.splitlist(
254 self.tk.call(
255 'tixForm', 'slaves', self._w)))
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000256
257
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000258
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000259Tkinter.Widget.__bases__ = Tkinter.Widget.__bases__ + (Form,)
260
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000261class TixWidget(Tkinter.Widget):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000262 """A TixWidget class is used to package all (or most) Tix widgets.
263
264 Widget initialization is extended in two ways:
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000265 1) It is possible to give a list of options which must be part of
Moshe Zadka22710822001-03-21 17:24:49 +0000266 the creation command (so called Tix 'static' options). These cannot be
267 given as a 'config' command later.
268 2) It is possible to give the name of an existing TK widget. These are
269 child widgets created automatically by a Tix mega-widget. The Tk call
270 to create these widgets is therefore bypassed in TixWidget.__init__
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000271
272 Both options are for use by subclasses only.
273 """
274 def __init__ (self, master=None, widgetName=None,
Moshe Zadka22710822001-03-21 17:24:49 +0000275 static_options=None, cnf={}, kw={}):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000276 # Merge keywords and dictionary arguments
277 if kw:
Moshe Zadka22710822001-03-21 17:24:49 +0000278 cnf = _cnfmerge((cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000279 else:
280 cnf = _cnfmerge(cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000281
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000282 # Move static options into extra. static_options must be
283 # a list of keywords (or None).
284 extra=()
Neal Norwitzf539bde2002-11-14 02:43:40 +0000285
286 # 'options' is always a static option
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000287 if static_options:
Neal Norwitzf539bde2002-11-14 02:43:40 +0000288 static_options.append('options')
289 else:
290 static_options = ['options']
291
292 for k,v in cnf.items()[:]:
293 if k in static_options:
294 extra = extra + ('-' + k, v)
295 del cnf[k]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000296
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000297 self.widgetName = widgetName
298 Widget._setup(self, master, cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000299
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000300 # If widgetName is None, this is a dummy creation call where the
301 # corresponding Tk widget has already been created by Tix
302 if widgetName:
303 apply(self.tk.call, (widgetName, self._w) + extra)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000304
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000305 # Non-static options - to be done via a 'config' command
306 if cnf:
307 Widget.config(self, cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000308
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000309 # Dictionary to hold subwidget names for easier access. We can't
310 # use the children list because the public Tix names may not be the
311 # same as the pathname component
312 self.subwidget_list = {}
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000313
314 # We set up an attribute access function so that it is possible to
315 # do w.ok['text'] = 'Hello' rather than w.subwidget('ok')['text'] = 'Hello'
316 # when w is a StdButtonBox.
317 # We can even do w.ok.invoke() because w.ok is subclassed from the
318 # Button class if you go through the proper constructors
319 def __getattr__(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000320 if self.subwidget_list.has_key(name):
321 return self.subwidget_list[name]
322 raise AttributeError, name
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000323
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000324 def set_silent(self, value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000325 """Set a variable without calling its action routine"""
326 self.tk.call('tixSetSilent', self._w, value)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000327
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000328 def subwidget(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000329 """Return the named subwidget (which must have been created by
330 the sub-class)."""
331 n = self._subwidget_name(name)
332 if not n:
333 raise TclError, "Subwidget " + name + " not child of " + self._name
334 # Remove header of name and leading dot
335 n = n[len(self._w)+1:]
336 return self._nametowidget(n)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000337
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000338 def subwidgets_all(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000339 """Return all subwidgets."""
340 names = self._subwidget_names()
341 if not names:
342 return []
343 retlist = []
344 for name in names:
345 name = name[len(self._w)+1:]
346 try:
347 retlist.append(self._nametowidget(name))
348 except:
349 # some of the widgets are unknown e.g. border in LabelFrame
350 pass
351 return retlist
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000352
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000353 def _subwidget_name(self,name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000354 """Get a subwidget name (returns a String, not a Widget !)"""
355 try:
356 return self.tk.call(self._w, 'subwidget', name)
357 except TclError:
358 return None
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000359
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000360 def _subwidget_names(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000361 """Return the name of all subwidgets."""
362 try:
363 x = self.tk.call(self._w, 'subwidgets', '-all')
364 return self.tk.split(x)
365 except TclError:
366 return None
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000367
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000368 def config_all(self, option, value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000369 """Set configuration options for all subwidgets (and self)."""
370 if option == '':
371 return
372 elif not isinstance(option, StringType):
373 option = `option`
374 if not isinstance(value, StringType):
375 value = `value`
376 names = self._subwidget_names()
377 for name in names:
378 self.tk.call(name, 'configure', '-' + option, value)
Neal Norwitz731a9862002-12-10 02:18:49 +0000379 # These are missing from Tkinter
380 def image_create(self, imgtype, cnf={}, master=None, **kw):
381 if not master:
382 master = Tkinter._default_root
383 if not master:
384 raise RuntimeError, 'Too early to create image'
385 if kw and cnf: cnf = _cnfmerge((cnf, kw))
386 elif kw: cnf = kw
387 options = ()
388 for k, v in cnf.items():
389 if callable(v):
390 v = self._register(v)
391 options = options + ('-'+k, v)
392 return master.tk.call(('image', 'create', imgtype,) + options)
393 def image_delete(self, imgname):
394 try:
395 self.tk.call('image', 'delete', imgname)
396 except TclError:
397 # May happen if the root was destroyed
398 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000399
400# Subwidgets are child widgets created automatically by mega-widgets.
401# In python, we have to create these subwidgets manually to mirror their
402# existence in Tk/Tix.
403class TixSubWidget(TixWidget):
404 """Subwidget class.
405
406 This is used to mirror child widgets automatically created
407 by Tix/Tk as part of a mega-widget in Python (which is not informed
408 of this)"""
409
410 def __init__(self, master, name,
Moshe Zadka22710822001-03-21 17:24:49 +0000411 destroy_physically=1, check_intermediate=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000412 if check_intermediate:
413 path = master._subwidget_name(name)
414 try:
415 path = path[len(master._w)+1:]
Neal Norwitzebb41902002-05-31 20:51:31 +0000416 plist = path.split('.')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000417 except:
418 plist = []
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000419
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000420 if (not check_intermediate) or len(plist) < 2:
421 # immediate descendant
422 TixWidget.__init__(self, master, None, None, {'name' : name})
423 else:
424 # Ensure that the intermediate widgets exist
425 parent = master
426 for i in range(len(plist) - 1):
Neal Norwitzebb41902002-05-31 20:51:31 +0000427 n = '.'.join(plist[:i+1])
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000428 try:
429 w = master._nametowidget(n)
430 parent = w
431 except KeyError:
432 # Create the intermediate widget
433 parent = TixSubWidget(parent, plist[i],
Neal Norwitzf539bde2002-11-14 02:43:40 +0000434 destroy_physically=0,
435 check_intermediate=0)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000436 TixWidget.__init__(self, parent, None, None, {'name' : name})
437 self.destroy_physically = destroy_physically
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000438
439 def destroy(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000440 # For some widgets e.g., a NoteBook, when we call destructors,
441 # we must be careful not to destroy the frame widget since this
442 # also destroys the parent NoteBook thus leading to an exception
443 # in Tkinter when it finally calls Tcl to destroy the NoteBook
444 for c in self.children.values(): c.destroy()
445 if self.master.children.has_key(self._name):
446 del self.master.children[self._name]
447 if self.master.subwidget_list.has_key(self._name):
448 del self.master.subwidget_list[self._name]
449 if self.destroy_physically:
450 # This is bypassed only for a few widgets
451 self.tk.call('destroy', self._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000452
453
454# Useful func. to split Tcl lists and return as a dict. From Tkinter.py
455def _lst2dict(lst):
456 dict = {}
457 for x in lst:
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000458 dict[x[0][1:]] = (x[0][1:],) + x[1:]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000459 return dict
460
461# Useful class to create a display style - later shared by many items.
462# Contributed by Steffen Kremser
463class DisplayStyle:
464 """DisplayStyle - handle configuration options shared by
465 (multiple) Display Items"""
466
467 def __init__(self, itemtype, cnf={}, **kw ):
Moshe Zadka22710822001-03-21 17:24:49 +0000468 master = _default_root # global from Tkinter
469 if not master and cnf.has_key('refwindow'): master=cnf['refwindow']
470 elif not master and kw.has_key('refwindow'): master= kw['refwindow']
471 elif not master: raise RuntimeError, "Too early to create display style: no root window"
472 self.tk = master.tk
473 self.stylename = apply(self.tk.call, ('tixDisplayStyle', itemtype) +
474 self._options(cnf,kw) )
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000475
476 def __str__(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000477 return self.stylename
478
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000479 def _options(self, cnf, kw ):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000480 if kw and cnf:
481 cnf = _cnfmerge((cnf, kw))
482 elif kw:
483 cnf = kw
484 opts = ()
485 for k, v in cnf.items():
486 opts = opts + ('-'+k, v)
487 return opts
488
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000489 def delete(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000490 self.tk.call(self.stylename, 'delete')
491
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000492 def __setitem__(self,key,value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000493 self.tk.call(self.stylename, 'configure', '-%s'%key, value)
494
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000495 def config(self, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000496 return _lst2dict(
497 self.tk.split(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000498 apply(self.tk.call,
499 (self.stylename, 'configure') + self._options(cnf,kw))))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000500
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000501 def __getitem__(self,key):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000502 return self.tk.call(self.stylename, 'cget', '-%s'%key)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000503
504
505######################################################
506### The Tix Widget classes - in alphabetical order ###
507######################################################
508
509class Balloon(TixWidget):
510 """Balloon help widget.
511
Moshe Zadka22710822001-03-21 17:24:49 +0000512 Subwidget Class
513 --------- -----
Fred Drake723293c2001-12-13 04:53:07 +0000514 label Label
515 message Message"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000516
Martin v. Löwis46874282002-12-06 10:33:45 +0000517 # FIXME: It should inherit -superclass tixShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000518 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis652e1912001-11-25 14:50:56 +0000519 # static seem to be -installcolormap -initwait -statusbar -cursor
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000520 static = ['options', 'installcolormap', 'initwait', 'statusbar',
521 'cursor']
522 TixWidget.__init__(self, master, 'tixBalloon', static, cnf, kw)
523 self.subwidget_list['label'] = _dummyLabel(self, 'label',
524 destroy_physically=0)
525 self.subwidget_list['message'] = _dummyLabel(self, 'message',
526 destroy_physically=0)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000527
528 def bind_widget(self, widget, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000529 """Bind balloon widget to another.
530 One balloon widget may be bound to several widgets at the same time"""
531 apply(self.tk.call,
532 (self._w, 'bind', widget._w) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000533
534 def unbind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000535 self.tk.call(self._w, 'unbind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000536
537class ButtonBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000538 """ButtonBox - A container for pushbuttons.
539 Subwidgets are the buttons added with the add method.
540 """
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000541 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000542 TixWidget.__init__(self, master, 'tixButtonBox',
543 ['orientation', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000544
545 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000546 """Add a button with given name to box."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000547
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000548 btn = apply(self.tk.call,
549 (self._w, 'add', name) + self._options(cnf, kw))
550 self.subwidget_list[name] = _dummyButton(self, name)
551 return btn
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000552
553 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000554 if self.subwidget_list.has_key(name):
555 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000556
557class ComboBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000558 """ComboBox - an Entry field with a dropdown menu. The user can select a
559 choice by either typing in the entry subwdget or selecting from the
560 listbox subwidget.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000561
Moshe Zadka22710822001-03-21 17:24:49 +0000562 Subwidget Class
563 --------- -----
564 entry Entry
565 arrow Button
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000566 slistbox ScrolledListBox
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000567 tick Button
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000568 cross Button : present if created with the fancy option"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000569
Martin v. Löwis46874282002-12-06 10:33:45 +0000570 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000571 def __init__ (self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000572 TixWidget.__init__(self, master, 'tixComboBox',
573 ['editable', 'dropdown', 'fancy', 'options'],
574 cnf, kw)
575 self.subwidget_list['label'] = _dummyLabel(self, 'label')
576 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
577 self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
578 self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
579 'slistbox')
580 try:
581 self.subwidget_list['tick'] = _dummyButton(self, 'tick')
582 self.subwidget_list['cross'] = _dummyButton(self, 'cross')
583 except TypeError:
584 # unavailable when -fancy not specified
585 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000586
Neal Norwitz731a9862002-12-10 02:18:49 +0000587 # align
588
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000589 def add_history(self, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000590 self.tk.call(self._w, 'addhistory', str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000591
592 def append_history(self, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000593 self.tk.call(self._w, 'appendhistory', str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000594
595 def insert(self, index, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000596 self.tk.call(self._w, 'insert', index, str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000597
598 def pick(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000599 self.tk.call(self._w, 'pick', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000600
601class Control(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000602 """Control - An entry field with value change arrows. The user can
603 adjust the value by pressing the two arrow buttons or by entering
604 the value directly into the entry. The new value will be checked
605 against the user-defined upper and lower limits.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000606
Moshe Zadka22710822001-03-21 17:24:49 +0000607 Subwidget Class
608 --------- -----
609 incr Button
610 decr Button
611 entry Entry
612 label Label"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000613
Martin v. Löwis46874282002-12-06 10:33:45 +0000614 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000615 def __init__ (self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000616 TixWidget.__init__(self, master, 'tixControl', ['options'], cnf, kw)
617 self.subwidget_list['incr'] = _dummyButton(self, 'incr')
618 self.subwidget_list['decr'] = _dummyButton(self, 'decr')
619 self.subwidget_list['label'] = _dummyLabel(self, 'label')
620 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000621
622 def decrement(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000623 self.tk.call(self._w, 'decr')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000624
625 def increment(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000626 self.tk.call(self._w, 'incr')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000627
628 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000629 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000630
631 def update(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000632 self.tk.call(self._w, 'update')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000633
634class DirList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000635 """DirList - displays a list view of a directory, its previous
636 directories and its sub-directories. The user can choose one of
637 the directories displayed in the list or change to another directory.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000638
Moshe Zadka22710822001-03-21 17:24:49 +0000639 Subwidget Class
640 --------- -----
641 hlist HList
642 hsb Scrollbar
643 vsb Scrollbar"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000644
Martin v. Löwis46874282002-12-06 10:33:45 +0000645 # FIXME: It should inherit -superclass tixScrolledHList
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000646 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000647 TixWidget.__init__(self, master, 'tixDirList', ['options'], cnf, kw)
648 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
649 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
650 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000651
652 def chdir(self, dir):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000653 self.tk.call(self._w, 'chdir', dir)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000654
655class DirTree(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000656 """DirTree - Directory Listing in a hierarchical view.
657 Displays a tree view of a directory, its previous directories and its
658 sub-directories. The user can choose one of the directories displayed
659 in the list or change to another directory.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000660
Moshe Zadka22710822001-03-21 17:24:49 +0000661 Subwidget Class
662 --------- -----
Neal Norwitzf539bde2002-11-14 02:43:40 +0000663 hlist HList
664 hsb Scrollbar
665 vsb Scrollbar"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000666
Martin v. Löwis46874282002-12-06 10:33:45 +0000667 # FIXME: It should inherit -superclass tixScrolledHList
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000668 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000669 TixWidget.__init__(self, master, 'tixDirTree', ['options'], cnf, kw)
670 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
671 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
672 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000673
674 def chdir(self, dir):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000675 self.tk.call(self._w, 'chdir', dir)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000676
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000677class DirSelectBox(TixWidget):
678 """DirSelectBox - Motif style file select box.
679 It is generally used for
680 the user to choose a file. FileSelectBox stores the files mostly
681 recently selected into a ComboBox widget so that they can be quickly
682 selected again.
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000683
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000684 Subwidget Class
685 --------- -----
686 selection ComboBox
Neal Norwitzf539bde2002-11-14 02:43:40 +0000687 filter ComboBox
688 dirlist ScrolledListBox
689 filelist ScrolledListBox"""
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000690
691 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000692 TixWidget.__init__(self, master, 'tixDirSelectBox', ['options'], cnf, kw)
693 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
694 self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000695
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000696class ExFileSelectBox(TixWidget):
697 """ExFileSelectBox - MS Windows style file select box.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000698 It provides an convenient method for the user to select files.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000699
Moshe Zadka22710822001-03-21 17:24:49 +0000700 Subwidget Class
701 --------- -----
702 cancel Button
703 ok Button
704 hidden Checkbutton
705 types ComboBox
706 dir ComboBox
707 file ComboBox
708 dirlist ScrolledListBox
709 filelist ScrolledListBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000710
711 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000712 TixWidget.__init__(self, master, 'tixExFileSelectBox', ['options'], cnf, kw)
713 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
714 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
715 self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
716 self.subwidget_list['types'] = _dummyComboBox(self, 'types')
717 self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
718 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
719 self.subwidget_list['file'] = _dummyComboBox(self, 'file')
720 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000721
722 def filter(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000723 self.tk.call(self._w, 'filter')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000724
725 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000726 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000727
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000728
729# Should inherit from a Dialog class
730class DirSelectDialog(TixWidget):
731 """The DirSelectDialog widget presents the directories in the file
732 system in a dialog window. The user can use this dialog window to
733 navigate through the file system to select the desired directory.
734
735 Subwidgets Class
736 ---------- -----
737 dirbox DirSelectDialog"""
738
Martin v. Löwis46874282002-12-06 10:33:45 +0000739 # FIXME: It should inherit -superclass tixDialogShell
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000740 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000741 TixWidget.__init__(self, master, 'tixDirSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000742 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000743 self.subwidget_list['dirbox'] = _dummyDirSelectBox(self, 'dirbox')
744 # cancel and ok buttons are missing
745
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000746 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000747 self.tk.call(self._w, 'popup')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000748
749 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000750 self.tk.call(self._w, 'popdown')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000751
752
753# Should inherit from a Dialog class
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000754class ExFileSelectDialog(TixWidget):
755 """ExFileSelectDialog - MS Windows style file select dialog.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000756 It provides an convenient method for the user to select files.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000757
Moshe Zadka22710822001-03-21 17:24:49 +0000758 Subwidgets Class
759 ---------- -----
760 fsbox ExFileSelectBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000761
Martin v. Löwis46874282002-12-06 10:33:45 +0000762 # FIXME: It should inherit -superclass tixDialogShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000763 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000764 TixWidget.__init__(self, master, 'tixExFileSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000765 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000766 self.subwidget_list['fsbox'] = _dummyExFileSelectBox(self, 'fsbox')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000767
768 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000769 self.tk.call(self._w, 'popup')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000770
771 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000772 self.tk.call(self._w, 'popdown')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000773
774class FileSelectBox(TixWidget):
775 """ExFileSelectBox - Motif style file select box.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000776 It is generally used for
777 the user to choose a file. FileSelectBox stores the files mostly
778 recently selected into a ComboBox widget so that they can be quickly
779 selected again.
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000780
Moshe Zadka22710822001-03-21 17:24:49 +0000781 Subwidget Class
782 --------- -----
783 selection ComboBox
Neal Norwitzf539bde2002-11-14 02:43:40 +0000784 filter ComboBox
785 dirlist ScrolledListBox
786 filelist ScrolledListBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000787
788 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000789 TixWidget.__init__(self, master, 'tixFileSelectBox', ['options'], cnf, kw)
790 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
791 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
792 self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
793 self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000794
Moshe Zadka22710822001-03-21 17:24:49 +0000795 def apply_filter(self): # name of subwidget is same as command
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000796 self.tk.call(self._w, 'filter')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000797
798 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000799 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000800
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000801# Should inherit from a Dialog class
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000802class FileSelectDialog(TixWidget):
803 """FileSelectDialog - Motif style file select dialog.
804
Moshe Zadka22710822001-03-21 17:24:49 +0000805 Subwidgets Class
806 ---------- -----
807 btns StdButtonBox
808 fsbox FileSelectBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000809
Martin v. Löwis46874282002-12-06 10:33:45 +0000810 # FIXME: It should inherit -superclass tixStdDialogShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000811 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000812 TixWidget.__init__(self, master, 'tixFileSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000813 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000814 self.subwidget_list['btns'] = _dummyStdButtonBox(self, 'btns')
815 self.subwidget_list['fsbox'] = _dummyFileSelectBox(self, 'fsbox')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000816
817 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000818 self.tk.call(self._w, 'popup')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000819
820 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000821 self.tk.call(self._w, 'popdown')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000822
823class FileEntry(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000824 """FileEntry - Entry field with button that invokes a FileSelectDialog.
825 The user can type in the filename manually. Alternatively, the user can
826 press the button widget that sits next to the entry, which will bring
827 up a file selection dialog.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000828
Moshe Zadka22710822001-03-21 17:24:49 +0000829 Subwidgets Class
830 ---------- -----
831 button Button
832 entry Entry"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000833
Martin v. Löwis46874282002-12-06 10:33:45 +0000834 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000835 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000836 TixWidget.__init__(self, master, 'tixFileEntry',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000837 ['dialogtype', 'options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000838 self.subwidget_list['button'] = _dummyButton(self, 'button')
839 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000840
841 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000842 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000843
844 def file_dialog(self):
Martin v. Löwis46874282002-12-06 10:33:45 +0000845 # FIXME: return python object
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000846 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000847
848class HList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000849 """HList - Hierarchy display widget can be used to display any data
850 that have a hierarchical structure, for example, file system directory
851 trees. The list entries are indented and connected by branch lines
852 according to their places in the hierachy.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000853
854 Subwidgets - None"""
855
856 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000857 TixWidget.__init__(self, master, 'tixHList',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000858 ['columns', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000859
860 def add(self, entry, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000861 return apply(self.tk.call,
Neal Norwitzf539bde2002-11-14 02:43:40 +0000862 (self._w, 'add', entry) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000863
864 def add_child(self, parent=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000865 if not parent:
866 parent = ''
867 return apply(self.tk.call,
Neal Norwitzf539bde2002-11-14 02:43:40 +0000868 (self._w, 'addchild', parent) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000869
870 def anchor_set(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000871 self.tk.call(self._w, 'anchor', 'set', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000872
873 def anchor_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000874 self.tk.call(self._w, 'anchor', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000875
876 def column_width(self, col=0, width=None, chars=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000877 if not chars:
878 return self.tk.call(self._w, 'column', 'width', col, width)
879 else:
880 return self.tk.call(self._w, 'column', 'width', col,
Neal Norwitzf539bde2002-11-14 02:43:40 +0000881 '-char', chars)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000882
883 def delete_all(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000884 self.tk.call(self._w, 'delete', 'all')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000885
886 def delete_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000887 self.tk.call(self._w, 'delete', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000888
889 def delete_offsprings(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000890 self.tk.call(self._w, 'delete', 'offsprings', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000891
892 def delete_siblings(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000893 self.tk.call(self._w, 'delete', 'siblings', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000894
895 def dragsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000896 self.tk.call(self._w, 'dragsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000897
898 def dragsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000899 self.tk.call(self._w, 'dragsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000900
901 def dropsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000902 self.tk.call(self._w, 'dropsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000903
904 def dropsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000905 self.tk.call(self._w, 'dropsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000906
907 def header_create(self, col, cnf={}, **kw):
Moshe Zadka22710822001-03-21 17:24:49 +0000908 apply(self.tk.call,
909 (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)))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000916 apply(self.tk.call, (self._w, 'header', 'configure', col)
917 + self._options(cnf, kw))
918
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):
Moshe Zadka22710822001-03-21 17:24:49 +0000935 apply(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)))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000943 apply(self.tk.call,
944 (self._w, 'indicator', 'configure', entry) + self._options(cnf, kw))
945
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)))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000995 apply(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):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000999 apply(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
1008 def nearest(self, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001009 return self.tk.call(self._w, 'nearest', y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001010
1011 def see(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001012 self.tk.call(self._w, 'see', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001013
1014 def selection_clear(self, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001015 apply(self.tk.call,
1016 (self._w, 'selection', 'clear') + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001017
1018 def selection_includes(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001019 return self.tk.call(self._w, 'selection', 'includes', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001020
1021 def selection_set(self, first, last=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001022 self.tk.call(self._w, 'selection', 'set', first, last)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001023
1024 def show_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001025 return self.tk.call(self._w, 'show', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001026
1027 def xview(self, *args):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001028 apply(self.tk.call, (self._w, 'xview') + args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001029
1030 def yview(self, *args):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001031 apply(self.tk.call, (self._w, 'yview') + args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001032
1033class InputOnly(TixWidget):
Martin v. Löwis46874282002-12-06 10:33:45 +00001034 """InputOnly - Invisible widget. Unix only.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001035
1036 Subwidgets - None"""
1037
1038 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001039 TixWidget.__init__(self, master, 'tixInputOnly', None, cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001040
1041class LabelEntry(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001042 """LabelEntry - Entry field with label. Packages an entry widget
1043 and a label into one mega widget. It can beused be used to simplify
1044 the creation of ``entry-form'' type of interface.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001045
Moshe Zadka22710822001-03-21 17:24:49 +00001046 Subwidgets Class
1047 ---------- -----
1048 label Label
1049 entry Entry"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001050
1051 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001052 TixWidget.__init__(self, master, 'tixLabelEntry',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001053 ['labelside','options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001054 self.subwidget_list['label'] = _dummyLabel(self, 'label')
1055 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001056
1057class LabelFrame(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001058 """LabelFrame - Labelled Frame container. Packages a frame widget
1059 and a label into one mega widget. To create widgets inside a
1060 LabelFrame widget, one creates the new widgets relative to the
1061 frame subwidget and manage them inside the frame subwidget.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001062
Moshe Zadka22710822001-03-21 17:24:49 +00001063 Subwidgets Class
1064 ---------- -----
1065 label Label
1066 frame Frame"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001067
1068 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001069 TixWidget.__init__(self, master, 'tixLabelFrame',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001070 ['labelside','options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001071 self.subwidget_list['label'] = _dummyLabel(self, 'label')
1072 self.subwidget_list['frame'] = _dummyFrame(self, 'frame')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001073
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001074
1075class ListNoteBook(TixWidget):
1076 """A ListNoteBook widget is very similar to the TixNoteBook widget:
1077 it can be used to display many windows in a limited space using a
1078 notebook metaphor. The notebook is divided into a stack of pages
1079 (windows). At one time only one of these pages can be shown.
1080 The user can navigate through these pages by
1081 choosing the name of the desired page in the hlist subwidget."""
1082
1083 def __init__(self, master, cnf={}, **kw):
Neal Norwitzf539bde2002-11-14 02:43:40 +00001084 TixWidget.__init__(self, master, 'tixListNoteBook', ['options'], cnf, kw)
1085 # Is this necessary? It's not an exposed subwidget in Tix.
1086 self.subwidget_list['pane'] = _dummyPanedWindow(self, 'pane',
1087 destroy_physically=0)
1088 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1089 self.subwidget_list['shlist'] = _dummyScrolledHList(self, 'shlist')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001090
1091 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001092 apply(self.tk.call,
1093 (self._w, 'add', name) + self._options(cnf, kw))
1094 self.subwidget_list[name] = TixSubWidget(self, name)
1095 return self.subwidget_list[name]
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001096
Martin v. Löwis01824bf2002-09-19 08:12:55 +00001097 def page(self, name):
1098 return self.subwidget(name)
1099
1100 def pages(self):
1101 # Can't call subwidgets_all directly because we don't want .nbframe
1102 names = self.tk.split(self.tk.call(self._w, 'pages'))
1103 ret = []
1104 for x in names:
1105 ret.append(self.subwidget(x))
1106 return ret
1107
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001108 def raise_page(self, name): # raise is a python keyword
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001109 self.tk.call(self._w, 'raise', name)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001110
1111class Meter(TixWidget):
1112 """The Meter widget can be used to show the progress of a background
1113 job which may take a long time to execute.
1114 """
1115
1116 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001117 TixWidget.__init__(self, master, 'tixMeter',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001118 ['options'], cnf, kw)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001119
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001120class NoteBook(TixWidget):
1121 """NoteBook - Multi-page container widget (tabbed notebook metaphor).
1122
Moshe Zadka22710822001-03-21 17:24:49 +00001123 Subwidgets Class
1124 ---------- -----
1125 nbframe NoteBookFrame
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001126 <pages> page widgets added dynamically with the add method"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001127
1128 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001129 TixWidget.__init__(self,master,'tixNoteBook', ['options'], cnf, kw)
1130 self.subwidget_list['nbframe'] = TixSubWidget(self, 'nbframe',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001131 destroy_physically=0)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001132
1133 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001134 apply(self.tk.call,
1135 (self._w, 'add', name) + self._options(cnf, kw))
1136 self.subwidget_list[name] = TixSubWidget(self, name)
1137 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001138
1139 def delete(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001140 self.tk.call(self._w, 'delete', name)
1141 self.subwidget_list[name].destroy()
1142 del self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001143
1144 def page(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001145 return self.subwidget(name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001146
1147 def pages(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001148 # Can't call subwidgets_all directly because we don't want .nbframe
1149 names = self.tk.split(self.tk.call(self._w, 'pages'))
1150 ret = []
1151 for x in names:
1152 ret.append(self.subwidget(x))
1153 return ret
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001154
Moshe Zadka22710822001-03-21 17:24:49 +00001155 def raise_page(self, name): # raise is a python keyword
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001156 self.tk.call(self._w, 'raise', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001157
1158 def raised(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001159 return self.tk.call(self._w, 'raised')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001160
1161class NoteBookFrame(TixWidget):
Martin v. Löwis46874282002-12-06 10:33:45 +00001162 # FIXME: This is dangerous to expose to be called on its own.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001163 pass
1164
1165class OptionMenu(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001166 """OptionMenu - creates a menu button of options.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001167
Moshe Zadka22710822001-03-21 17:24:49 +00001168 Subwidget Class
1169 --------- -----
Neal Norwitzf539bde2002-11-14 02:43:40 +00001170 menubutton Menubutton
1171 menu Menu"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001172
1173 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001174 TixWidget.__init__(self, master, 'tixOptionMenu', ['options'], cnf, kw)
1175 self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
1176 self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001177
1178 def add_command(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001179 apply(self.tk.call,
1180 (self._w, 'add', 'command', name) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001181
1182 def add_separator(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001183 apply(self.tk.call,
1184 (self._w, 'add', 'separator', name) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001185
1186 def delete(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001187 self.tk.call(self._w, 'delete', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001188
1189 def disable(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001190 self.tk.call(self._w, 'disable', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001191
1192 def enable(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001193 self.tk.call(self._w, 'enable', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001194
1195class PanedWindow(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001196 """PanedWindow - Multi-pane container widget
1197 allows the user to interactively manipulate the sizes of several
1198 panes. The panes can be arranged either vertically or horizontally.The
1199 user changes the sizes of the panes by dragging the resize handle
1200 between two panes.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001201
Moshe Zadka22710822001-03-21 17:24:49 +00001202 Subwidgets Class
1203 ---------- -----
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001204 <panes> g/p widgets added dynamically with the add method."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001205
1206 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001207 TixWidget.__init__(self, master, 'tixPanedWindow', ['orientation', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001208
Neal Norwitzf539bde2002-11-14 02:43:40 +00001209 # add delete forget panecget paneconfigure panes setsize
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001210 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001211 apply(self.tk.call,
1212 (self._w, 'add', name) + self._options(cnf, kw))
1213 self.subwidget_list[name] = TixSubWidget(self, name,
Neal Norwitzf539bde2002-11-14 02:43:40 +00001214 check_intermediate=0)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001215 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001216
Neal Norwitzf539bde2002-11-14 02:43:40 +00001217 def delete(self, name):
1218 self.tk.call(self._w, 'delete', name)
1219 self.subwidget_list[name].destroy()
1220 del self.subwidget_list[name]
1221
1222 def forget(self, name):
1223 self.tk.call(self._w, 'forget', name)
1224
1225 def panecget(self, entry, opt):
1226 return self.tk.call(self._w, 'panecget', entry, opt)
1227
1228 def paneconfigure(self, entry, cnf={}, **kw):
1229 if cnf is None:
1230 return _lst2dict(
1231 self.tk.split(
1232 self.tk.call(self._w, 'paneconfigure', entry)))
1233 apply(self.tk.call,
1234 (self._w, 'paneconfigure', entry) + self._options(cnf, kw))
1235
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001236 def panes(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001237 names = self.tk.call(self._w, 'panes')
1238 ret = []
1239 for x in names:
1240 ret.append(self.subwidget(x))
1241 return ret
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001242
1243class PopupMenu(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001244 """PopupMenu widget can be used as a replacement of the tk_popup command.
1245 The advantage of the Tix PopupMenu widget is it requires less application
1246 code to manipulate.
1247
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001248
Moshe Zadka22710822001-03-21 17:24:49 +00001249 Subwidgets Class
1250 ---------- -----
1251 menubutton Menubutton
1252 menu Menu"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001253
Martin v. Löwis46874282002-12-06 10:33:45 +00001254 # FIXME: It should inherit -superclass tixShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001255 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001256 TixWidget.__init__(self, master, 'tixPopupMenu', ['options'], cnf, kw)
1257 self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
1258 self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001259
1260 def bind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001261 self.tk.call(self._w, 'bind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001262
1263 def unbind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001264 self.tk.call(self._w, 'unbind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001265
1266 def post_widget(self, widget, x, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001267 self.tk.call(self._w, 'post', widget._w, x, y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001268
1269class ResizeHandle(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001270 """Internal widget to draw resize handles on Scrolled widgets."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001271 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001272 # There seems to be a Tix bug rejecting the configure method
1273 # Let's try making the flags -static
1274 flags = ['options', 'command', 'cursorfg', 'cursorbg',
1275 'handlesize', 'hintcolor', 'hintwidth',
1276 'x', 'y']
1277 # In fact, x y height width are configurable
1278 TixWidget.__init__(self, master, 'tixResizeHandle',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001279 flags, cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001280
1281 def attach_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001282 self.tk.call(self._w, 'attachwidget', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001283
Martin v. Löwis652e1912001-11-25 14:50:56 +00001284 def detach_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001285 self.tk.call(self._w, 'detachwidget', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001286
1287 def hide(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001288 self.tk.call(self._w, 'hide', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001289
1290 def show(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001291 self.tk.call(self._w, 'show', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001292
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001293class ScrolledHList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001294 """ScrolledHList - HList with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001295
Martin v. Löwis46874282002-12-06 10:33:45 +00001296 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001297 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001298 TixWidget.__init__(self, master, 'tixScrolledHList', ['options'],
Neal Norwitzf539bde2002-11-14 02:43:40 +00001299 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001300 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1301 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1302 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001303
1304class ScrolledListBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001305 """ScrolledListBox - Listbox with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001306
Martin v. Löwis46874282002-12-06 10:33:45 +00001307 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001308 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001309 TixWidget.__init__(self, master, 'tixScrolledListBox', ['options'], cnf, kw)
1310 self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
1311 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1312 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001313
1314class ScrolledText(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001315 """ScrolledText - Text with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001316
Martin v. Löwis46874282002-12-06 10:33:45 +00001317 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001318 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001319 TixWidget.__init__(self, master, 'tixScrolledText', ['options'], cnf, kw)
1320 self.subwidget_list['text'] = _dummyText(self, 'text')
1321 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1322 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001323
1324class ScrolledTList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001325 """ScrolledTList - TList with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001326
Martin v. Löwis46874282002-12-06 10:33:45 +00001327 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001328 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001329 TixWidget.__init__(self, master, 'tixScrolledTList', ['options'],
Neal Norwitzf539bde2002-11-14 02:43:40 +00001330 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001331 self.subwidget_list['tlist'] = _dummyTList(self, 'tlist')
1332 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1333 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001334
1335class ScrolledWindow(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001336 """ScrolledWindow - Window with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001337
Martin v. Löwis46874282002-12-06 10:33:45 +00001338 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001339 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001340 TixWidget.__init__(self, master, 'tixScrolledWindow', ['options'], cnf, kw)
1341 self.subwidget_list['window'] = _dummyFrame(self, 'window')
1342 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1343 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001344
1345class Select(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001346 """Select - Container of button subwidgets. It can be used to provide
1347 radio-box or check-box style of selection options for the user.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001348
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001349 Subwidgets are buttons added dynamically using the add method."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001350
Martin v. Löwis46874282002-12-06 10:33:45 +00001351 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001352 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001353 TixWidget.__init__(self, master, 'tixSelect',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001354 ['allowzero', 'radio', 'orientation', 'labelside',
1355 'options'],
1356 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001357 self.subwidget_list['label'] = _dummyLabel(self, 'label')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001358
1359 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001360 apply(self.tk.call,
1361 (self._w, 'add', name) + self._options(cnf, kw))
1362 self.subwidget_list[name] = _dummyButton(self, name)
1363 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001364
1365 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001366 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001367
Neal Norwitzf539bde2002-11-14 02:43:40 +00001368class Shell(TixWidget):
1369 """Toplevel window.
1370
1371 Subwidgets - None"""
1372
1373 def __init__ (self,master=None,cnf={}, **kw):
1374 TixWidget.__init__(self, master, 'tixShell', ['options', 'title'], cnf, kw)
1375
1376class DialogShell(TixWidget):
1377 """Toplevel window, with popup popdown and center methods.
1378 It tells the window manager that it is a dialog window and should be
1379 treated specially. The exact treatment depends on the treatment of
1380 the window manager.
1381
1382 Subwidgets - None"""
1383
Martin v. Löwis46874282002-12-06 10:33:45 +00001384 # FIXME: It should inherit from Shell
Neal Norwitzf539bde2002-11-14 02:43:40 +00001385 def __init__ (self,master=None,cnf={}, **kw):
1386 TixWidget.__init__(self, master,
1387 'tixDialogShell',
1388 ['options', 'title', 'mapped',
1389 'minheight', 'minwidth',
1390 'parent', 'transient'], cnf, kw)
1391
1392 def popdown(self):
1393 self.tk.call(self._w, 'popdown')
1394
1395 def popup(self):
1396 self.tk.call(self._w, 'popup')
1397
1398 def center(self):
1399 self.tk.call(self._w, 'center')
1400
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001401class StdButtonBox(TixWidget):
1402 """StdButtonBox - Standard Button Box (OK, Apply, Cancel and Help) """
1403
1404 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001405 TixWidget.__init__(self, master, 'tixStdButtonBox',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001406 ['orientation', 'options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001407 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1408 self.subwidget_list['apply'] = _dummyButton(self, 'apply')
1409 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1410 self.subwidget_list['help'] = _dummyButton(self, 'help')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001411
1412 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001413 if self.subwidget_list.has_key(name):
1414 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001415
1416class TList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001417 """TList - Hierarchy display widget which can be
1418 used to display data in a tabular format. The list entries of a TList
1419 widget are similar to the entries in the Tk listbox widget. The main
1420 differences are (1) the TList widget can display the list entries in a
1421 two dimensional format and (2) you can use graphical images as well as
1422 multiple colors and fonts for the list entries.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001423
1424 Subwidgets - None"""
1425
1426 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001427 TixWidget.__init__(self, master, 'tixTList', ['options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001428
1429 def active_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001430 self.tk.call(self._w, 'active', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001431
1432 def active_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001433 self.tk.call(self._w, 'active', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001434
1435 def anchor_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001436 self.tk.call(self._w, 'anchor', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001437
1438 def anchor_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001439 self.tk.call(self._w, 'anchor', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001440
1441 def delete(self, from_, to=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001442 self.tk.call(self._w, 'delete', from_, to)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001443
1444 def dragsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001445 self.tk.call(self._w, 'dragsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001446
1447 def dragsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001448 self.tk.call(self._w, 'dragsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001449
1450 def dropsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001451 self.tk.call(self._w, 'dropsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001452
1453 def dropsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001454 self.tk.call(self._w, 'dropsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001455
1456 def insert(self, index, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001457 apply(self.tk.call,
Neal Norwitzf539bde2002-11-14 02:43:40 +00001458 (self._w, 'insert', index) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001459
1460 def info_active(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001461 return self.tk.call(self._w, 'info', 'active')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001462
1463 def info_anchor(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001464 return self.tk.call(self._w, 'info', 'anchor')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001465
1466 def info_down(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001467 return self.tk.call(self._w, 'info', 'down', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001468
1469 def info_left(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001470 return self.tk.call(self._w, 'info', 'left', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001471
1472 def info_right(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001473 return self.tk.call(self._w, 'info', 'right', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001474
1475 def info_selection(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001476 c = self.tk.call(self._w, 'info', 'selection')
1477 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001478
1479 def info_size(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001480 return self.tk.call(self._w, 'info', 'size')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001481
1482 def info_up(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001483 return self.tk.call(self._w, 'info', 'up', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001484
1485 def nearest(self, x, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001486 return self.tk.call(self._w, 'nearest', x, y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001487
1488 def see(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001489 self.tk.call(self._w, 'see', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001490
1491 def selection_clear(self, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001492 apply(self.tk.call,
1493 (self._w, 'selection', 'clear') + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001494
1495 def selection_includes(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001496 return self.tk.call(self._w, 'selection', 'includes', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001497
1498 def selection_set(self, first, last=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001499 self.tk.call(self._w, 'selection', 'set', first, last)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001500
1501 def xview(self, *args):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001502 apply(self.tk.call, (self._w, 'xview') + args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001503
1504 def yview(self, *args):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001505 apply(self.tk.call, (self._w, 'yview') + args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001506
1507class Tree(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001508 """Tree - The tixTree widget can be used to display hierachical
1509 data in a tree form. The user can adjust
1510 the view of the tree by opening or closing parts of the tree."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001511
Martin v. Löwis46874282002-12-06 10:33:45 +00001512 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001513 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001514 TixWidget.__init__(self, master, 'tixTree',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001515 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001516 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1517 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1518 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001519
1520 def autosetmode(self):
Martin v. Löwis46874282002-12-06 10:33:45 +00001521 '''This command calls the setmode method for all the entries in this
1522 Tree widget: if an entry has no child entries, its mode is set to
1523 none. Otherwise, if the entry has any hidden child entries, its mode is
1524 set to open; otherwise its mode is set to close.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001525 self.tk.call(self._w, 'autosetmode')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001526
1527 def close(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001528 '''Close the entry given by entryPath if its mode is close.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001529 self.tk.call(self._w, 'close', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001530
1531 def getmode(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001532 '''Returns the current mode of the entry given by entryPath.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001533 return self.tk.call(self._w, 'getmode', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001534
1535 def open(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001536 '''Open the entry given by entryPath if its mode is open.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001537 self.tk.call(self._w, 'open', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001538
1539 def setmode(self, entrypath, mode='none'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001540 '''This command is used to indicate whether the entry given by
1541 entryPath has children entries and whether the children are visible. mode
1542 must be one of open, close or none. If mode is set to open, a (+)
1543 indicator is drawn next the the entry. If mode is set to close, a (-)
1544 indicator is drawn next the the entry. If mode is set to none, no
1545 indicators will be drawn for this entry. The default mode is none. The
1546 open mode indicates the entry has hidden children and this entry can be
1547 opened by the user. The close mode indicates that all the children of the
1548 entry are now visible and the entry can be closed by the user.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001549 self.tk.call(self._w, 'setmode', entrypath, mode)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001550
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001551
1552# Could try subclassing Tree for CheckList - would need another arg to init
1553class CheckList(TixWidget):
1554 """The CheckList widget
1555 displays a list of items to be selected by the user. CheckList acts
1556 similarly to the Tk checkbutton or radiobutton widgets, except it is
1557 capable of handling many more items than checkbuttons or radiobuttons.
1558 """
Martin v. Löwis46874282002-12-06 10:33:45 +00001559 # FIXME: It should inherit -superclass tixTree
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001560 def __init__(self, master=None, cnf={}, **kw):
1561 TixWidget.__init__(self, master, 'tixCheckList',
1562 ['options'], cnf, kw)
1563 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1564 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1565 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001566
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001567 def autosetmode(self):
Martin v. Löwis46874282002-12-06 10:33:45 +00001568 '''This command calls the setmode method for all the entries in this
1569 Tree widget: if an entry has no child entries, its mode is set to
1570 none. Otherwise, if the entry has any hidden child entries, its mode is
1571 set to open; otherwise its mode is set to close.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001572 self.tk.call(self._w, 'autosetmode')
1573
1574 def close(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001575 '''Close the entry given by entryPath if its mode is close.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001576 self.tk.call(self._w, 'close', entrypath)
1577
1578 def getmode(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001579 '''Returns the current mode of the entry given by entryPath.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001580 return self.tk.call(self._w, 'getmode', entrypath)
1581
1582 def open(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001583 '''Open the entry given by entryPath if its mode is open.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001584 self.tk.call(self._w, 'open', entrypath)
1585
1586 def getselection(self, mode='on'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001587 '''Returns a list of items whose status matches status. If status is
1588 not specified, the list of items in the "on" status will be returned.
1589 Mode can be on, off, default'''
1590 c = self.tk.split(self.tk.call(self._w, 'getselection', mode))
1591 return self.tk.splitlist(c)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001592
1593 def getstatus(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001594 '''Returns the current status of entryPath.'''
1595 return self.tk.call(self._w, 'getstatus', entrypath)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001596
1597 def setstatus(self, entrypath, mode='on'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001598 '''Sets the status of entryPath to be status. A bitmap will be
1599 displayed next to the entry its status is on, off or default.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001600 self.tk.call(self._w, 'setstatus', entrypath, mode)
1601
1602
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001603###########################################################################
1604### The subclassing below is used to instantiate the subwidgets in each ###
1605### mega widget. This allows us to access their methods directly. ###
1606###########################################################################
1607
1608class _dummyButton(Button, TixSubWidget):
1609 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001610 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001611
1612class _dummyCheckbutton(Checkbutton, TixSubWidget):
1613 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001614 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001615
1616class _dummyEntry(Entry, TixSubWidget):
1617 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001618 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001619
1620class _dummyFrame(Frame, TixSubWidget):
1621 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001622 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001623
1624class _dummyLabel(Label, TixSubWidget):
1625 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001626 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001627
1628class _dummyListbox(Listbox, TixSubWidget):
1629 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001630 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001631
1632class _dummyMenu(Menu, TixSubWidget):
1633 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001634 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001635
1636class _dummyMenubutton(Menubutton, TixSubWidget):
1637 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001638 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001639
1640class _dummyScrollbar(Scrollbar, TixSubWidget):
1641 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001642 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001643
1644class _dummyText(Text, TixSubWidget):
1645 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001646 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001647
1648class _dummyScrolledListBox(ScrolledListBox, TixSubWidget):
1649 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001650 TixSubWidget.__init__(self, master, name, destroy_physically)
1651 self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
1652 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1653 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001654
1655class _dummyHList(HList, TixSubWidget):
1656 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001657 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001658
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001659class _dummyScrolledHList(ScrolledHList, TixSubWidget):
1660 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001661 TixSubWidget.__init__(self, master, name, destroy_physically)
1662 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1663 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1664 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001665
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001666class _dummyTList(TList, TixSubWidget):
1667 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001668 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001669
1670class _dummyComboBox(ComboBox, TixSubWidget):
1671 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001672 TixSubWidget.__init__(self, master, name, destroy_physically)
1673 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
1674 self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
1675 # I'm not sure about this destroy_physically=0 in all cases;
1676 # it may depend on if -dropdown is true; I've added as a trial
1677 self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
Neal Norwitzf539bde2002-11-14 02:43:40 +00001678 'slistbox',
1679 destroy_physically=0)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001680 self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001681 destroy_physically=0)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001682
1683class _dummyDirList(DirList, TixSubWidget):
1684 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001685 TixSubWidget.__init__(self, master, name, destroy_physically)
1686 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1687 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1688 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001689
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001690class _dummyDirSelectBox(DirSelectBox, TixSubWidget):
1691 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001692 TixSubWidget.__init__(self, master, name, destroy_physically)
1693 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
1694 self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001695
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001696class _dummyExFileSelectBox(ExFileSelectBox, TixSubWidget):
1697 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001698 TixSubWidget.__init__(self, master, name, destroy_physically)
1699 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1700 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1701 self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
1702 self.subwidget_list['types'] = _dummyComboBox(self, 'types')
1703 self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
1704 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
1705 self.subwidget_list['file'] = _dummyComboBox(self, 'file')
1706 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001707
1708class _dummyFileSelectBox(FileSelectBox, TixSubWidget):
1709 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001710 TixSubWidget.__init__(self, master, name, destroy_physically)
1711 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
1712 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
1713 self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
1714 self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001715
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001716class _dummyFileComboBox(ComboBox, TixSubWidget):
1717 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001718 TixSubWidget.__init__(self, master, name, destroy_physically)
1719 self.subwidget_list['dircbx'] = _dummyComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001720
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001721class _dummyStdButtonBox(StdButtonBox, 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['ok'] = _dummyButton(self, 'ok')
1725 self.subwidget_list['apply'] = _dummyButton(self, 'apply')
1726 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1727 self.subwidget_list['help'] = _dummyButton(self, 'help')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001728
1729class _dummyNoteBookFrame(NoteBookFrame, TixSubWidget):
1730 def __init__(self, master, name, destroy_physically=0):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001731 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001732
Martin v. Löwis01824bf2002-09-19 08:12:55 +00001733class _dummyPanedWindow(PanedWindow, TixSubWidget):
1734 def __init__(self, master, name, destroy_physically=1):
1735 TixSubWidget.__init__(self, master, name, destroy_physically)
1736
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001737########################
1738### Utility Routines ###
1739########################
1740
1741# Returns the qualified path name for the widget. Normally used to set
1742# default options for subwidgets. See tixwidgets.py
1743def OptionName(widget):
1744 return widget.tk.call('tixOptionName', widget._w)
1745
1746# Called with a dictionary argument of the form
1747# {'*.c':'C source files', '*.txt':'Text Files', '*':'All files'}
1748# returns a string which can be used to configure the fsbox file types
1749# in an ExFileSelectBox. i.e.,
1750# '{{*} {* - All files}} {{*.c} {*.c - C source files}} {{*.txt} {*.txt - Text Files}}'
1751def FileTypeList(dict):
1752 s = ''
1753 for type in dict.keys():
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001754 s = s + '{{' + type + '} {' + type + ' - ' + dict[type] + '}} '
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001755 return s
1756
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001757# Still to be done:
Martin v. Löwis46874282002-12-06 10:33:45 +00001758# tixIconView
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001759class CObjView(TixWidget):
1760 """This file implements the Canvas Object View widget. This is a base
1761 class of IconView. It implements automatic placement/adjustment of the
1762 scrollbars according to the canvas objects inside the canvas subwidget.
1763 The scrollbars are adjusted so that the canvas is just large enough
1764 to see all the objects.
1765 """
Martin v. Löwis46874282002-12-06 10:33:45 +00001766 # FIXME: It should inherit -superclass tixScrolledWidget
1767 pass
1768
1769class ScrolledGrid(TixWidget):
1770 '''Scrolled Grid widgets'''
1771
1772 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001773 pass