blob: 98a06c239a2395d6dce6d4c1b2ee7ef63103d3ec [file] [log] [blame]
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00002#
3# $Id$
4#
Martin v. Löwisb7b32602001-11-02 23:48:20 +00005# Tix.py -- Tix widget wrappers.
6#
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00007# For Tix, see http://tix.sourceforge.net
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00008#
Moshe Zadka22710822001-03-21 17:24:49 +00009# - Sudhir Shenoy (sshenoy@gol.com), Dec. 1995.
Martin v. Löwisb7b32602001-11-02 23:48:20 +000010# based on an idea of Jean-Marc Lugrin (lugrin@ms.com)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000011#
12# NOTE: In order to minimize changes to Tkinter.py, some of the code here
Moshe Zadka22710822001-03-21 17:24:49 +000013# (TixWidget.__init__) has been taken from Tkinter (Widget.__init__)
14# and will break if there are major changes in Tkinter.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000015#
16# The Tix widgets are represented by a class hierarchy in python with proper
17# inheritance of base classes.
18#
19# As a result after creating a 'w = StdButtonBox', I can write
Moshe Zadka22710822001-03-21 17:24:49 +000020# w.ok['text'] = 'Who Cares'
21# or w.ok['bg'] = w['bg']
22# or even w.ok.invoke()
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000023# etc.
24#
25# Compare the demo tixwidgets.py to the original Tcl program and you will
26# appreciate the advantages.
27#
28
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000029from Tkinter import *
30from Tkinter import _flatten, _cnfmerge, _default_root
31
32# WARNING - TkVersion is a limited precision floating point number
33if TkVersion < 3.999:
34 raise ImportError, "This version of Tix.py requires Tk 4.0 or higher"
35
36import _tkinter # If this fails your Python may not be configured for Tk
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000037
38# Some more constants (for consistency with Tkinter)
39WINDOW = 'window'
40TEXT = 'text'
41STATUS = 'status'
42IMMEDIATE = 'immediate'
43IMAGE = 'image'
44IMAGETEXT = 'imagetext'
45BALLOON = 'balloon'
46AUTO = 'auto'
47ACROSSTOP = 'acrosstop'
48
Fred Drake723293c2001-12-13 04:53:07 +000049# Some constants used by Tkinter dooneevent()
50TCL_DONT_WAIT = 1 << 1
51TCL_WINDOW_EVENTS = 1 << 2
52TCL_FILE_EVENTS = 1 << 3
53TCL_TIMER_EVENTS = 1 << 4
54TCL_IDLE_EVENTS = 1 << 5
55TCL_ALL_EVENTS = 0
56
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000057# BEWARE - this is implemented by copying some code from the Widget class
58# in Tkinter (to override Widget initialization) and is therefore
59# liable to break.
60import Tkinter, os
Martin v. Löwisb7b32602001-11-02 23:48:20 +000061
62# Could probably add this to Tkinter.Misc
63class tixCommand:
Fred Drake723293c2001-12-13 04:53:07 +000064 """The tix commands provide access to miscellaneous elements
Martin v. Löwisb7b32602001-11-02 23:48:20 +000065 of Tix's internal state and the Tix application context.
Fred Drake723293c2001-12-13 04:53:07 +000066 Most of the information manipulated by these commands pertains
67 to the application as a whole, or to a screen or
68 display, rather than to a particular window.
Martin v. Löwisb7b32602001-11-02 23:48:20 +000069
70 This is a mixin class, assumed to be mixed to Tkinter.Tk
71 that supports the self.tk.call method.
72 """
Fred Drake723293c2001-12-13 04:53:07 +000073
Martin v. Löwisb7b32602001-11-02 23:48:20 +000074 def tix_addbitmapdir(self, directory):
Fred Drake723293c2001-12-13 04:53:07 +000075 """Tix maintains a list of directories under which
Martin v. Löwisb7b32602001-11-02 23:48:20 +000076 the tix_getimage and tix_getbitmap commands will
Fred Drake723293c2001-12-13 04:53:07 +000077 search for image files. The standard bitmap directory
78 is $TIX_LIBRARY/bitmaps. The addbitmapdir command
79 adds directory into this list. By using this
Martin v. Löwisb7b32602001-11-02 23:48:20 +000080 command, the image files of an applications can
81 also be located using the tix_getimage or tix_getbitmap
82 command.
83 """
84 return self.tk.call('tix', 'addbitmapdir', directory)
85
86 def tix_cget(self, option):
87 """Returns the current value of the configuration
88 option given by option. Option may be any of the
89 options described in the CONFIGURATION OPTIONS section.
90 """
91 return self.tk.call('tix', 'cget', option)
92
93 def tix_configure(self, cnf=None, **kw):
Fred Drake723293c2001-12-13 04:53:07 +000094 """Query or modify the configuration options of the Tix application
95 context. If no option is specified, returns a dictionary all of the
96 available options. If option is specified with no value, then the
97 command returns a list describing the one named option (this list
98 will be identical to the corresponding sublist of the value
99 returned if no option is specified). If one or more option-value
100 pairs are specified, then the command modifies the given option(s)
101 to have the given value(s); in this case the command returns an
102 empty string. Option may be any of the configuration options.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000103 """
Fred Drake723293c2001-12-13 04:53:07 +0000104 # Copied from Tkinter.py
105 if kw:
106 cnf = _cnfmerge((cnf, kw))
107 elif cnf:
108 cnf = _cnfmerge(cnf)
109 if cnf is None:
110 cnf = {}
111 for x in self.tk.split(self.tk.call('tix', 'configure')):
112 cnf[x[0][1:]] = (x[0][1:],) + x[1:]
113 return cnf
114 if isinstance(cnf, StringType):
115 x = self.tk.split(self.tk.call('tix', 'configure', '-'+cnf))
116 return (x[0][1:],) + x[1:]
117 return self.tk.call(('tix', 'configure') + self._options(cnf))
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000118
119 def tix_filedialog(self, dlgclass=None):
Fred Drake723293c2001-12-13 04:53:07 +0000120 """Returns the file selection dialog that may be shared among
121 different calls from this application. This command will create a
122 file selection dialog widget when it is called the first time. This
123 dialog will be returned by all subsequent calls to tix_filedialog.
124 An optional dlgclass parameter can be passed to specified what type
125 of file selection dialog widget is desired. Possible options are
126 tix FileSelectDialog or tixExFileSelectDialog.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000127 """
128 if dlgclass is not None:
129 return self.tk.call('tix', 'filedialog', dlgclass)
130 else:
131 return self.tk.call('tix', 'filedialog')
132
133 def tix_getbitmap(self, name):
Fred Drake723293c2001-12-13 04:53:07 +0000134 """Locates a bitmap file of the name name.xpm or name in one of the
135 bitmap directories (see the tix_addbitmapdir command above). By
136 using tix_getbitmap, you can avoid hard coding the pathnames of the
137 bitmap files in your application. When successful, it returns the
138 complete pathname of the bitmap file, prefixed with the character
139 '@'. The returned value can be used to configure the -bitmap
140 option of the TK and Tix widgets.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000141 """
142 return self.tk.call('tix', 'getbitmap', name)
143
144 def tix_getimage(self, name):
Fred Drake723293c2001-12-13 04:53:07 +0000145 """Locates an image file of the name name.xpm, name.xbm or name.ppm
146 in one of the bitmap directories (see the addbitmapdir command
147 above). If more than one file with the same name (but different
148 extensions) exist, then the image type is chosen according to the
149 depth of the X display: xbm images are chosen on monochrome
150 displays and color images are chosen on color displays. By using
151 tix_ getimage, you can advoid hard coding the pathnames of the
152 image files in your application. When successful, this command
153 returns the name of the newly created image, which can be used to
154 configure the -image option of the Tk and Tix widgets.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000155 """
156 return self.tk.call('tix', 'getimage', name)
157
158 def tix_option_get(self, name):
159 """Gets the options manitained by the Tix
Fred Drake723293c2001-12-13 04:53:07 +0000160 scheme mechanism. Available options include:
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000161
162 active_bg active_fg bg
163 bold_font dark1_bg dark1_fg
164 dark2_bg dark2_fg disabled_fg
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000165 fg fixed_font font
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000166 inactive_bg inactive_fg input1_bg
167 input2_bg italic_font light1_bg
168 light1_fg light2_bg light2_fg
169 menu_font output1_bg output2_bg
170 select_bg select_fg selector
171 """
172 # could use self.tk.globalgetvar('tixOption', name)
173 return self.tk.call('tix', 'option', 'get', name)
174
175 def tix_resetoptions(self, newScheme, newFontSet, newScmPrio=None):
Fred Drake723293c2001-12-13 04:53:07 +0000176 """Resets the scheme and fontset of the Tix application to
177 newScheme and newFontSet, respectively. This affects only those
178 widgets created after this call. Therefore, it is best to call the
179 resetoptions command before the creation of any widgets in a Tix
180 application.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000181
Fred Drake723293c2001-12-13 04:53:07 +0000182 The optional parameter newScmPrio can be given to reset the
183 priority level of the Tk options set by the Tix schemes.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000184
Fred Drake723293c2001-12-13 04:53:07 +0000185 Because of the way Tk handles the X option database, after Tix has
186 been has imported and inited, it is not possible to reset the color
187 schemes and font sets using the tix config command. Instead, the
188 tix_resetoptions command must be used.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000189 """
190 if newScmPrio is not None:
191 return self.tk.call('tix', 'resetoptions', newScheme, newFontSet, newScmPrio)
192 else:
193 return self.tk.call('tix', 'resetoptions', newScheme, newFontSet)
194
195class Tk(Tkinter.Tk, tixCommand):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000196 """Toplevel widget of Tix which represents mostly the main window
197 of an application. It has an associated Tcl interpreter."""
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000198 def __init__(self, screenName=None, baseName=None, className='Tix'):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000199 Tkinter.Tk.__init__(self, screenName, baseName, className)
Moshe Zadka22710822001-03-21 17:24:49 +0000200 tixlib = os.environ.get('TIX_LIBRARY')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000201 self.tk.eval('global auto_path; lappend auto_path [file dir [info nameof]]')
Moshe Zadka22710822001-03-21 17:24:49 +0000202 if tixlib is not None:
203 self.tk.eval('global auto_path; lappend auto_path {%s}' % tixlib)
204 self.tk.eval('global tcl_pkgPath; lappend tcl_pkgPath {%s}' % tixlib)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000205 # Load Tix - this should work dynamically or statically
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +0000206 # If it's static, tcl/tix8.1/pkgIndex.tcl should have
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000207 # 'load {} Tix'
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +0000208 # If it's dynamic under Unix, tcl/tix8.1/pkgIndex.tcl should have
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000209 # 'load libtix8.1.8.3.so Tix'
Moshe Zadka22710822001-03-21 17:24:49 +0000210 self.tk.eval('package require Tix')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000211
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +0000212 def destroy(self):
213 # For safety, remove an delete_window binding before destroy
214 self.protocol("WM_DELETE_WINDOW", "")
215 Tkinter.Tk.destroy(self)
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000216
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000217# The Tix 'tixForm' geometry manager
218class Form:
219 """The Tix Form geometry manager
220
221 Widgets can be arranged by specifying attachments to other widgets.
222 See Tix documentation for complete details"""
223
224 def config(self, cnf={}, **kw):
225 apply(self.tk.call, ('tixForm', self._w) + self._options(cnf, kw))
226
227 form = config
228
229 def __setitem__(self, key, value):
Guido van Rossum49fa2bd2001-08-13 14:12:35 +0000230 Form.form(self, {key: value})
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000231
232 def check(self):
233 return self.tk.call('tixForm', 'check', self._w)
234
235 def forget(self):
236 self.tk.call('tixForm', 'forget', self._w)
237
238 def grid(self, xsize=0, ysize=0):
239 if (not xsize) and (not ysize):
240 x = self.tk.call('tixForm', 'grid', self._w)
241 y = self.tk.splitlist(x)
242 z = ()
243 for x in y:
244 z = z + (self.tk.getint(x),)
245 return z
Martin v. Löwis46874282002-12-06 10:33:45 +0000246 return self.tk.call('tixForm', 'grid', self._w, xsize, ysize)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000247
248 def info(self, option=None):
249 if not option:
250 return self.tk.call('tixForm', 'info', self._w)
251 if option[0] != '-':
252 option = '-' + option
253 return self.tk.call('tixForm', 'info', self._w, option)
254
255 def slaves(self):
256 return map(self._nametowidget,
257 self.tk.splitlist(
258 self.tk.call(
259 'tixForm', 'slaves', self._w)))
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000260
261
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000262
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000263Tkinter.Widget.__bases__ = Tkinter.Widget.__bases__ + (Form,)
264
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000265class TixWidget(Tkinter.Widget):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000266 """A TixWidget class is used to package all (or most) Tix widgets.
267
268 Widget initialization is extended in two ways:
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000269 1) It is possible to give a list of options which must be part of
Moshe Zadka22710822001-03-21 17:24:49 +0000270 the creation command (so called Tix 'static' options). These cannot be
271 given as a 'config' command later.
272 2) It is possible to give the name of an existing TK widget. These are
273 child widgets created automatically by a Tix mega-widget. The Tk call
274 to create these widgets is therefore bypassed in TixWidget.__init__
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000275
276 Both options are for use by subclasses only.
277 """
278 def __init__ (self, master=None, widgetName=None,
Moshe Zadka22710822001-03-21 17:24:49 +0000279 static_options=None, cnf={}, kw={}):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000280 # Merge keywords and dictionary arguments
281 if kw:
Moshe Zadka22710822001-03-21 17:24:49 +0000282 cnf = _cnfmerge((cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000283 else:
284 cnf = _cnfmerge(cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000285
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000286 # Move static options into extra. static_options must be
287 # a list of keywords (or None).
288 extra=()
Neal Norwitzf539bde2002-11-14 02:43:40 +0000289
290 # 'options' is always a static option
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000291 if static_options:
Neal Norwitzf539bde2002-11-14 02:43:40 +0000292 static_options.append('options')
293 else:
294 static_options = ['options']
295
296 for k,v in cnf.items()[:]:
297 if k in static_options:
298 extra = extra + ('-' + k, v)
299 del cnf[k]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000300
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000301 self.widgetName = widgetName
302 Widget._setup(self, master, cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000303
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000304 # If widgetName is None, this is a dummy creation call where the
305 # corresponding Tk widget has already been created by Tix
306 if widgetName:
307 apply(self.tk.call, (widgetName, self._w) + extra)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000308
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000309 # Non-static options - to be done via a 'config' command
310 if cnf:
311 Widget.config(self, cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000312
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000313 # Dictionary to hold subwidget names for easier access. We can't
314 # use the children list because the public Tix names may not be the
315 # same as the pathname component
316 self.subwidget_list = {}
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000317
318 # We set up an attribute access function so that it is possible to
319 # do w.ok['text'] = 'Hello' rather than w.subwidget('ok')['text'] = 'Hello'
320 # when w is a StdButtonBox.
321 # We can even do w.ok.invoke() because w.ok is subclassed from the
322 # Button class if you go through the proper constructors
323 def __getattr__(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000324 if self.subwidget_list.has_key(name):
325 return self.subwidget_list[name]
326 raise AttributeError, name
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000327
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000328 def set_silent(self, value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000329 """Set a variable without calling its action routine"""
330 self.tk.call('tixSetSilent', self._w, value)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000331
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000332 def subwidget(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000333 """Return the named subwidget (which must have been created by
334 the sub-class)."""
335 n = self._subwidget_name(name)
336 if not n:
337 raise TclError, "Subwidget " + name + " not child of " + self._name
338 # Remove header of name and leading dot
339 n = n[len(self._w)+1:]
340 return self._nametowidget(n)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000341
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000342 def subwidgets_all(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000343 """Return all subwidgets."""
344 names = self._subwidget_names()
345 if not names:
346 return []
347 retlist = []
348 for name in names:
349 name = name[len(self._w)+1:]
350 try:
351 retlist.append(self._nametowidget(name))
352 except:
353 # some of the widgets are unknown e.g. border in LabelFrame
354 pass
355 return retlist
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000356
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000357 def _subwidget_name(self,name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000358 """Get a subwidget name (returns a String, not a Widget !)"""
359 try:
360 return self.tk.call(self._w, 'subwidget', name)
361 except TclError:
362 return None
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000363
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000364 def _subwidget_names(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000365 """Return the name of all subwidgets."""
366 try:
367 x = self.tk.call(self._w, 'subwidgets', '-all')
368 return self.tk.split(x)
369 except TclError:
370 return None
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000371
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000372 def config_all(self, option, value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000373 """Set configuration options for all subwidgets (and self)."""
374 if option == '':
375 return
376 elif not isinstance(option, StringType):
377 option = `option`
378 if not isinstance(value, StringType):
379 value = `value`
380 names = self._subwidget_names()
381 for name in names:
382 self.tk.call(name, 'configure', '-' + option, value)
Neal Norwitz731a9862002-12-10 02:18:49 +0000383 # These are missing from Tkinter
384 def image_create(self, imgtype, cnf={}, master=None, **kw):
385 if not master:
386 master = Tkinter._default_root
387 if not master:
388 raise RuntimeError, 'Too early to create image'
389 if kw and cnf: cnf = _cnfmerge((cnf, kw))
390 elif kw: cnf = kw
391 options = ()
392 for k, v in cnf.items():
393 if callable(v):
394 v = self._register(v)
395 options = options + ('-'+k, v)
396 return master.tk.call(('image', 'create', imgtype,) + options)
397 def image_delete(self, imgname):
398 try:
399 self.tk.call('image', 'delete', imgname)
400 except TclError:
401 # May happen if the root was destroyed
402 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000403
404# Subwidgets are child widgets created automatically by mega-widgets.
405# In python, we have to create these subwidgets manually to mirror their
406# existence in Tk/Tix.
407class TixSubWidget(TixWidget):
408 """Subwidget class.
409
410 This is used to mirror child widgets automatically created
411 by Tix/Tk as part of a mega-widget in Python (which is not informed
412 of this)"""
413
414 def __init__(self, master, name,
Moshe Zadka22710822001-03-21 17:24:49 +0000415 destroy_physically=1, check_intermediate=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000416 if check_intermediate:
417 path = master._subwidget_name(name)
418 try:
419 path = path[len(master._w)+1:]
Neal Norwitzebb41902002-05-31 20:51:31 +0000420 plist = path.split('.')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000421 except:
422 plist = []
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000423
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000424 if (not check_intermediate) or len(plist) < 2:
425 # immediate descendant
426 TixWidget.__init__(self, master, None, None, {'name' : name})
427 else:
428 # Ensure that the intermediate widgets exist
429 parent = master
430 for i in range(len(plist) - 1):
Neal Norwitzebb41902002-05-31 20:51:31 +0000431 n = '.'.join(plist[:i+1])
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000432 try:
433 w = master._nametowidget(n)
434 parent = w
435 except KeyError:
436 # Create the intermediate widget
437 parent = TixSubWidget(parent, plist[i],
Neal Norwitzf539bde2002-11-14 02:43:40 +0000438 destroy_physically=0,
439 check_intermediate=0)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000440 TixWidget.__init__(self, parent, None, None, {'name' : name})
441 self.destroy_physically = destroy_physically
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000442
443 def destroy(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000444 # For some widgets e.g., a NoteBook, when we call destructors,
445 # we must be careful not to destroy the frame widget since this
446 # also destroys the parent NoteBook thus leading to an exception
447 # in Tkinter when it finally calls Tcl to destroy the NoteBook
448 for c in self.children.values(): c.destroy()
449 if self.master.children.has_key(self._name):
450 del self.master.children[self._name]
451 if self.master.subwidget_list.has_key(self._name):
452 del self.master.subwidget_list[self._name]
453 if self.destroy_physically:
454 # This is bypassed only for a few widgets
455 self.tk.call('destroy', self._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000456
457
458# Useful func. to split Tcl lists and return as a dict. From Tkinter.py
459def _lst2dict(lst):
460 dict = {}
461 for x in lst:
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000462 dict[x[0][1:]] = (x[0][1:],) + x[1:]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000463 return dict
464
465# Useful class to create a display style - later shared by many items.
466# Contributed by Steffen Kremser
467class DisplayStyle:
468 """DisplayStyle - handle configuration options shared by
469 (multiple) Display Items"""
470
471 def __init__(self, itemtype, cnf={}, **kw ):
Moshe Zadka22710822001-03-21 17:24:49 +0000472 master = _default_root # global from Tkinter
473 if not master and cnf.has_key('refwindow'): master=cnf['refwindow']
474 elif not master and kw.has_key('refwindow'): master= kw['refwindow']
475 elif not master: raise RuntimeError, "Too early to create display style: no root window"
476 self.tk = master.tk
477 self.stylename = apply(self.tk.call, ('tixDisplayStyle', itemtype) +
478 self._options(cnf,kw) )
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000479
480 def __str__(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000481 return self.stylename
482
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000483 def _options(self, cnf, kw ):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000484 if kw and cnf:
485 cnf = _cnfmerge((cnf, kw))
486 elif kw:
487 cnf = kw
488 opts = ()
489 for k, v in cnf.items():
490 opts = opts + ('-'+k, v)
491 return opts
492
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000493 def delete(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000494 self.tk.call(self.stylename, 'delete')
495
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000496 def __setitem__(self,key,value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000497 self.tk.call(self.stylename, 'configure', '-%s'%key, value)
498
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000499 def config(self, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000500 return _lst2dict(
501 self.tk.split(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000502 apply(self.tk.call,
503 (self.stylename, 'configure') + self._options(cnf,kw))))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000504
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000505 def __getitem__(self,key):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000506 return self.tk.call(self.stylename, 'cget', '-%s'%key)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000507
508
509######################################################
510### The Tix Widget classes - in alphabetical order ###
511######################################################
512
513class Balloon(TixWidget):
514 """Balloon help widget.
515
Moshe Zadka22710822001-03-21 17:24:49 +0000516 Subwidget Class
517 --------- -----
Fred Drake723293c2001-12-13 04:53:07 +0000518 label Label
519 message Message"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000520
Martin v. Löwis46874282002-12-06 10:33:45 +0000521 # FIXME: It should inherit -superclass tixShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000522 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis652e1912001-11-25 14:50:56 +0000523 # static seem to be -installcolormap -initwait -statusbar -cursor
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000524 static = ['options', 'installcolormap', 'initwait', 'statusbar',
525 'cursor']
526 TixWidget.__init__(self, master, 'tixBalloon', static, cnf, kw)
527 self.subwidget_list['label'] = _dummyLabel(self, 'label',
528 destroy_physically=0)
529 self.subwidget_list['message'] = _dummyLabel(self, 'message',
530 destroy_physically=0)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000531
532 def bind_widget(self, widget, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000533 """Bind balloon widget to another.
534 One balloon widget may be bound to several widgets at the same time"""
535 apply(self.tk.call,
536 (self._w, 'bind', widget._w) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000537
538 def unbind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000539 self.tk.call(self._w, 'unbind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000540
541class ButtonBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000542 """ButtonBox - A container for pushbuttons.
543 Subwidgets are the buttons added with the add method.
544 """
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000545 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000546 TixWidget.__init__(self, master, 'tixButtonBox',
547 ['orientation', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000548
549 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000550 """Add a button with given name to box."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000551
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000552 btn = apply(self.tk.call,
553 (self._w, 'add', name) + self._options(cnf, kw))
554 self.subwidget_list[name] = _dummyButton(self, name)
555 return btn
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000556
557 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000558 if self.subwidget_list.has_key(name):
559 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000560
561class ComboBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000562 """ComboBox - an Entry field with a dropdown menu. The user can select a
563 choice by either typing in the entry subwdget or selecting from the
564 listbox subwidget.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000565
Moshe Zadka22710822001-03-21 17:24:49 +0000566 Subwidget Class
567 --------- -----
568 entry Entry
569 arrow Button
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000570 slistbox ScrolledListBox
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000571 tick Button
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000572 cross Button : present if created with the fancy option"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000573
Martin v. Löwis46874282002-12-06 10:33:45 +0000574 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000575 def __init__ (self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000576 TixWidget.__init__(self, master, 'tixComboBox',
577 ['editable', 'dropdown', 'fancy', 'options'],
578 cnf, kw)
579 self.subwidget_list['label'] = _dummyLabel(self, 'label')
580 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
581 self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
582 self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
583 'slistbox')
584 try:
585 self.subwidget_list['tick'] = _dummyButton(self, 'tick')
586 self.subwidget_list['cross'] = _dummyButton(self, 'cross')
587 except TypeError:
588 # unavailable when -fancy not specified
589 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000590
Neal Norwitz731a9862002-12-10 02:18:49 +0000591 # align
592
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000593 def add_history(self, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000594 self.tk.call(self._w, 'addhistory', str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000595
596 def append_history(self, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000597 self.tk.call(self._w, 'appendhistory', str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000598
599 def insert(self, index, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000600 self.tk.call(self._w, 'insert', index, str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000601
602 def pick(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000603 self.tk.call(self._w, 'pick', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000604
605class Control(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000606 """Control - An entry field with value change arrows. The user can
607 adjust the value by pressing the two arrow buttons or by entering
608 the value directly into the entry. The new value will be checked
609 against the user-defined upper and lower limits.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000610
Moshe Zadka22710822001-03-21 17:24:49 +0000611 Subwidget Class
612 --------- -----
613 incr Button
614 decr Button
615 entry Entry
616 label Label"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000617
Martin v. Löwis46874282002-12-06 10:33:45 +0000618 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000619 def __init__ (self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000620 TixWidget.__init__(self, master, 'tixControl', ['options'], cnf, kw)
621 self.subwidget_list['incr'] = _dummyButton(self, 'incr')
622 self.subwidget_list['decr'] = _dummyButton(self, 'decr')
623 self.subwidget_list['label'] = _dummyLabel(self, 'label')
624 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000625
626 def decrement(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000627 self.tk.call(self._w, 'decr')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000628
629 def increment(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000630 self.tk.call(self._w, 'incr')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000631
632 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000633 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000634
635 def update(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000636 self.tk.call(self._w, 'update')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000637
638class DirList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000639 """DirList - displays a list view of a directory, its previous
640 directories and its sub-directories. The user can choose one of
641 the directories displayed in the list or change to another directory.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000642
Moshe Zadka22710822001-03-21 17:24:49 +0000643 Subwidget Class
644 --------- -----
645 hlist HList
646 hsb Scrollbar
647 vsb Scrollbar"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000648
Martin v. Löwis46874282002-12-06 10:33:45 +0000649 # FIXME: It should inherit -superclass tixScrolledHList
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000650 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000651 TixWidget.__init__(self, master, 'tixDirList', ['options'], cnf, kw)
652 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
653 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
654 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000655
656 def chdir(self, dir):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000657 self.tk.call(self._w, 'chdir', dir)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000658
659class DirTree(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000660 """DirTree - Directory Listing in a hierarchical view.
661 Displays a tree view of a directory, its previous directories and its
662 sub-directories. The user can choose one of the directories displayed
663 in the list or change to another directory.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000664
Moshe Zadka22710822001-03-21 17:24:49 +0000665 Subwidget Class
666 --------- -----
Neal Norwitzf539bde2002-11-14 02:43:40 +0000667 hlist HList
668 hsb Scrollbar
669 vsb Scrollbar"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000670
Martin v. Löwis46874282002-12-06 10:33:45 +0000671 # FIXME: It should inherit -superclass tixScrolledHList
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000672 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000673 TixWidget.__init__(self, master, 'tixDirTree', ['options'], cnf, kw)
674 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
675 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
676 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000677
678 def chdir(self, dir):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000679 self.tk.call(self._w, 'chdir', dir)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000680
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000681class DirSelectBox(TixWidget):
682 """DirSelectBox - Motif style file select box.
683 It is generally used for
684 the user to choose a file. FileSelectBox stores the files mostly
685 recently selected into a ComboBox widget so that they can be quickly
686 selected again.
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000687
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000688 Subwidget Class
689 --------- -----
690 selection ComboBox
Neal Norwitzf539bde2002-11-14 02:43:40 +0000691 filter ComboBox
692 dirlist ScrolledListBox
693 filelist ScrolledListBox"""
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000694
695 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000696 TixWidget.__init__(self, master, 'tixDirSelectBox', ['options'], cnf, kw)
697 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
698 self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000699
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000700class ExFileSelectBox(TixWidget):
701 """ExFileSelectBox - MS Windows style file select box.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000702 It provides an convenient method for the user to select files.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000703
Moshe Zadka22710822001-03-21 17:24:49 +0000704 Subwidget Class
705 --------- -----
706 cancel Button
707 ok Button
708 hidden Checkbutton
709 types ComboBox
710 dir ComboBox
711 file ComboBox
712 dirlist ScrolledListBox
713 filelist ScrolledListBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000714
715 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000716 TixWidget.__init__(self, master, 'tixExFileSelectBox', ['options'], cnf, kw)
717 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
718 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
719 self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
720 self.subwidget_list['types'] = _dummyComboBox(self, 'types')
721 self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
722 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
723 self.subwidget_list['file'] = _dummyComboBox(self, 'file')
724 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000725
726 def filter(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000727 self.tk.call(self._w, 'filter')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000728
729 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000730 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000731
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000732
733# Should inherit from a Dialog class
734class DirSelectDialog(TixWidget):
735 """The DirSelectDialog widget presents the directories in the file
736 system in a dialog window. The user can use this dialog window to
737 navigate through the file system to select the desired directory.
738
739 Subwidgets Class
740 ---------- -----
741 dirbox DirSelectDialog"""
742
Martin v. Löwis46874282002-12-06 10:33:45 +0000743 # FIXME: It should inherit -superclass tixDialogShell
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000744 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000745 TixWidget.__init__(self, master, 'tixDirSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000746 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000747 self.subwidget_list['dirbox'] = _dummyDirSelectBox(self, 'dirbox')
748 # cancel and ok buttons are missing
749
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000750 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000751 self.tk.call(self._w, 'popup')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000752
753 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000754 self.tk.call(self._w, 'popdown')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000755
756
757# Should inherit from a Dialog class
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000758class ExFileSelectDialog(TixWidget):
759 """ExFileSelectDialog - MS Windows style file select dialog.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000760 It provides an convenient method for the user to select files.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000761
Moshe Zadka22710822001-03-21 17:24:49 +0000762 Subwidgets Class
763 ---------- -----
764 fsbox ExFileSelectBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000765
Martin v. Löwis46874282002-12-06 10:33:45 +0000766 # FIXME: It should inherit -superclass tixDialogShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000767 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000768 TixWidget.__init__(self, master, 'tixExFileSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000769 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000770 self.subwidget_list['fsbox'] = _dummyExFileSelectBox(self, 'fsbox')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000771
772 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000773 self.tk.call(self._w, 'popup')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000774
775 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000776 self.tk.call(self._w, 'popdown')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000777
778class FileSelectBox(TixWidget):
779 """ExFileSelectBox - Motif style file select box.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000780 It is generally used for
781 the user to choose a file. FileSelectBox stores the files mostly
782 recently selected into a ComboBox widget so that they can be quickly
783 selected again.
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000784
Moshe Zadka22710822001-03-21 17:24:49 +0000785 Subwidget Class
786 --------- -----
787 selection ComboBox
Neal Norwitzf539bde2002-11-14 02:43:40 +0000788 filter ComboBox
789 dirlist ScrolledListBox
790 filelist ScrolledListBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000791
792 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000793 TixWidget.__init__(self, master, 'tixFileSelectBox', ['options'], cnf, kw)
794 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
795 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
796 self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
797 self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000798
Moshe Zadka22710822001-03-21 17:24:49 +0000799 def apply_filter(self): # name of subwidget is same as command
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000800 self.tk.call(self._w, 'filter')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000801
802 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000803 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000804
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000805# Should inherit from a Dialog class
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000806class FileSelectDialog(TixWidget):
807 """FileSelectDialog - Motif style file select dialog.
808
Moshe Zadka22710822001-03-21 17:24:49 +0000809 Subwidgets Class
810 ---------- -----
811 btns StdButtonBox
812 fsbox FileSelectBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000813
Martin v. Löwis46874282002-12-06 10:33:45 +0000814 # FIXME: It should inherit -superclass tixStdDialogShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000815 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000816 TixWidget.__init__(self, master, 'tixFileSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000817 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000818 self.subwidget_list['btns'] = _dummyStdButtonBox(self, 'btns')
819 self.subwidget_list['fsbox'] = _dummyFileSelectBox(self, 'fsbox')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000820
821 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000822 self.tk.call(self._w, 'popup')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000823
824 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000825 self.tk.call(self._w, 'popdown')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000826
827class FileEntry(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000828 """FileEntry - Entry field with button that invokes a FileSelectDialog.
829 The user can type in the filename manually. Alternatively, the user can
830 press the button widget that sits next to the entry, which will bring
831 up a file selection dialog.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000832
Moshe Zadka22710822001-03-21 17:24:49 +0000833 Subwidgets Class
834 ---------- -----
835 button Button
836 entry Entry"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000837
Martin v. Löwis46874282002-12-06 10:33:45 +0000838 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000839 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000840 TixWidget.__init__(self, master, 'tixFileEntry',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000841 ['dialogtype', 'options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000842 self.subwidget_list['button'] = _dummyButton(self, 'button')
843 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000844
845 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000846 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000847
848 def file_dialog(self):
Martin v. Löwis46874282002-12-06 10:33:45 +0000849 # FIXME: return python object
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000850 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000851
852class HList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000853 """HList - Hierarchy display widget can be used to display any data
854 that have a hierarchical structure, for example, file system directory
855 trees. The list entries are indented and connected by branch lines
856 according to their places in the hierachy.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000857
858 Subwidgets - None"""
859
860 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000861 TixWidget.__init__(self, master, 'tixHList',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000862 ['columns', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000863
864 def add(self, entry, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000865 return apply(self.tk.call,
Neal Norwitzf539bde2002-11-14 02:43:40 +0000866 (self._w, 'add', entry) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000867
868 def add_child(self, parent=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000869 if not parent:
870 parent = ''
871 return apply(self.tk.call,
Neal Norwitzf539bde2002-11-14 02:43:40 +0000872 (self._w, 'addchild', parent) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000873
874 def anchor_set(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000875 self.tk.call(self._w, 'anchor', 'set', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000876
877 def anchor_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000878 self.tk.call(self._w, 'anchor', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000879
880 def column_width(self, col=0, width=None, chars=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000881 if not chars:
882 return self.tk.call(self._w, 'column', 'width', col, width)
883 else:
884 return self.tk.call(self._w, 'column', 'width', col,
Neal Norwitzf539bde2002-11-14 02:43:40 +0000885 '-char', chars)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000886
887 def delete_all(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000888 self.tk.call(self._w, 'delete', 'all')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000889
890 def delete_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000891 self.tk.call(self._w, 'delete', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000892
893 def delete_offsprings(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000894 self.tk.call(self._w, 'delete', 'offsprings', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000895
896 def delete_siblings(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000897 self.tk.call(self._w, 'delete', 'siblings', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000898
899 def dragsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000900 self.tk.call(self._w, 'dragsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000901
902 def dragsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000903 self.tk.call(self._w, 'dragsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000904
905 def dropsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000906 self.tk.call(self._w, 'dropsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000907
908 def dropsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000909 self.tk.call(self._w, 'dropsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000910
911 def header_create(self, col, cnf={}, **kw):
Moshe Zadka22710822001-03-21 17:24:49 +0000912 apply(self.tk.call,
913 (self._w, 'header', 'create', col) + self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000914
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000915 def header_configure(self, col, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000916 if cnf is None:
917 return _lst2dict(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000918 self.tk.split(
919 self.tk.call(self._w, 'header', 'configure', col)))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000920 apply(self.tk.call, (self._w, 'header', 'configure', col)
921 + self._options(cnf, kw))
922
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000923 def header_cget(self, col, opt):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000924 return self.tk.call(self._w, 'header', 'cget', col, opt)
925
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000926 def header_exists(self, col):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000927 return self.tk.call(self._w, 'header', 'exists', col)
928
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000929 def header_delete(self, col):
Moshe Zadka22710822001-03-21 17:24:49 +0000930 self.tk.call(self._w, 'header', 'delete', col)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000931
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000932 def header_size(self, col):
Moshe Zadka22710822001-03-21 17:24:49 +0000933 return self.tk.call(self._w, 'header', 'size', col)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000934
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000935 def hide_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000936 self.tk.call(self._w, 'hide', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000937
938 def indicator_create(self, entry, cnf={}, **kw):
Moshe Zadka22710822001-03-21 17:24:49 +0000939 apply(self.tk.call,
940 (self._w, 'indicator', 'create', entry) + self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000941
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000942 def indicator_configure(self, entry, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000943 if cnf is None:
944 return _lst2dict(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000945 self.tk.split(
946 self.tk.call(self._w, 'indicator', 'configure', entry)))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000947 apply(self.tk.call,
948 (self._w, 'indicator', 'configure', entry) + self._options(cnf, kw))
949
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000950 def indicator_cget(self, entry, opt):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000951 return self.tk.call(self._w, 'indicator', 'cget', entry, opt)
952
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000953 def indicator_exists(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000954 return self.tk.call (self._w, 'indicator', 'exists', entry)
955
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000956 def indicator_delete(self, entry):
Moshe Zadka22710822001-03-21 17:24:49 +0000957 self.tk.call(self._w, 'indicator', 'delete', entry)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000958
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000959 def indicator_size(self, entry):
Moshe Zadka22710822001-03-21 17:24:49 +0000960 return self.tk.call(self._w, 'indicator', 'size', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000961
962 def info_anchor(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000963 return self.tk.call(self._w, 'info', 'anchor')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000964
965 def info_children(self, entry=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000966 c = self.tk.call(self._w, 'info', 'children', entry)
967 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000968
969 def info_data(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000970 return self.tk.call(self._w, 'info', 'data', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000971
972 def info_exists(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000973 return self.tk.call(self._w, 'info', 'exists', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000974
975 def info_hidden(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000976 return self.tk.call(self._w, 'info', 'hidden', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000977
978 def info_next(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000979 return self.tk.call(self._w, 'info', 'next', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000980
981 def info_parent(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000982 return self.tk.call(self._w, 'info', 'parent', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000983
984 def info_prev(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000985 return self.tk.call(self._w, 'info', 'prev', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000986
987 def info_selection(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000988 c = self.tk.call(self._w, 'info', 'selection')
989 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000990
Martin v. Löwis3e048482001-10-09 11:50:55 +0000991 def item_cget(self, entry, col, opt):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000992 return self.tk.call(self._w, 'item', 'cget', entry, col, opt)
993
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000994 def item_configure(self, entry, col, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000995 if cnf is None:
996 return _lst2dict(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000997 self.tk.split(
998 self.tk.call(self._w, 'item', 'configure', entry, col)))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000999 apply(self.tk.call, (self._w, 'item', 'configure', entry, col) +
1000 self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001001
1002 def item_create(self, entry, col, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001003 apply(self.tk.call,
1004 (self._w, 'item', 'create', entry, col) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001005
1006 def item_exists(self, entry, col):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001007 return self.tk.call(self._w, 'item', 'exists', entry, col)
1008
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001009 def item_delete(self, entry, col):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001010 self.tk.call(self._w, 'item', 'delete', entry, col)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001011
1012 def nearest(self, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001013 return self.tk.call(self._w, 'nearest', y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001014
1015 def see(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001016 self.tk.call(self._w, 'see', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001017
1018 def selection_clear(self, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001019 apply(self.tk.call,
1020 (self._w, 'selection', 'clear') + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001021
1022 def selection_includes(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001023 return self.tk.call(self._w, 'selection', 'includes', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001024
1025 def selection_set(self, first, last=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001026 self.tk.call(self._w, 'selection', 'set', first, last)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001027
1028 def show_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001029 return self.tk.call(self._w, 'show', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001030
1031 def xview(self, *args):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001032 apply(self.tk.call, (self._w, 'xview') + args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001033
1034 def yview(self, *args):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001035 apply(self.tk.call, (self._w, 'yview') + args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001036
1037class InputOnly(TixWidget):
Martin v. Löwis46874282002-12-06 10:33:45 +00001038 """InputOnly - Invisible widget. Unix only.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001039
1040 Subwidgets - None"""
1041
1042 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001043 TixWidget.__init__(self, master, 'tixInputOnly', None, cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001044
1045class LabelEntry(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001046 """LabelEntry - Entry field with label. Packages an entry widget
1047 and a label into one mega widget. It can beused be used to simplify
1048 the creation of ``entry-form'' type of interface.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001049
Moshe Zadka22710822001-03-21 17:24:49 +00001050 Subwidgets Class
1051 ---------- -----
1052 label Label
1053 entry Entry"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001054
1055 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001056 TixWidget.__init__(self, master, 'tixLabelEntry',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001057 ['labelside','options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001058 self.subwidget_list['label'] = _dummyLabel(self, 'label')
1059 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001060
1061class LabelFrame(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001062 """LabelFrame - Labelled Frame container. Packages a frame widget
1063 and a label into one mega widget. To create widgets inside a
1064 LabelFrame widget, one creates the new widgets relative to the
1065 frame subwidget and manage them inside the frame subwidget.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001066
Moshe Zadka22710822001-03-21 17:24:49 +00001067 Subwidgets Class
1068 ---------- -----
1069 label Label
1070 frame Frame"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001071
1072 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001073 TixWidget.__init__(self, master, 'tixLabelFrame',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001074 ['labelside','options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001075 self.subwidget_list['label'] = _dummyLabel(self, 'label')
1076 self.subwidget_list['frame'] = _dummyFrame(self, 'frame')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001077
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001078
1079class ListNoteBook(TixWidget):
1080 """A ListNoteBook widget is very similar to the TixNoteBook widget:
1081 it can be used to display many windows in a limited space using a
1082 notebook metaphor. The notebook is divided into a stack of pages
1083 (windows). At one time only one of these pages can be shown.
1084 The user can navigate through these pages by
1085 choosing the name of the desired page in the hlist subwidget."""
1086
1087 def __init__(self, master, cnf={}, **kw):
Neal Norwitzf539bde2002-11-14 02:43:40 +00001088 TixWidget.__init__(self, master, 'tixListNoteBook', ['options'], cnf, kw)
1089 # Is this necessary? It's not an exposed subwidget in Tix.
1090 self.subwidget_list['pane'] = _dummyPanedWindow(self, 'pane',
1091 destroy_physically=0)
1092 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1093 self.subwidget_list['shlist'] = _dummyScrolledHList(self, 'shlist')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001094
1095 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001096 apply(self.tk.call,
1097 (self._w, 'add', name) + self._options(cnf, kw))
1098 self.subwidget_list[name] = TixSubWidget(self, name)
1099 return self.subwidget_list[name]
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001100
Martin v. Löwis01824bf2002-09-19 08:12:55 +00001101 def page(self, name):
1102 return self.subwidget(name)
1103
1104 def pages(self):
1105 # Can't call subwidgets_all directly because we don't want .nbframe
1106 names = self.tk.split(self.tk.call(self._w, 'pages'))
1107 ret = []
1108 for x in names:
1109 ret.append(self.subwidget(x))
1110 return ret
1111
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001112 def raise_page(self, name): # raise is a python keyword
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001113 self.tk.call(self._w, 'raise', name)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001114
1115class Meter(TixWidget):
1116 """The Meter widget can be used to show the progress of a background
1117 job which may take a long time to execute.
1118 """
1119
1120 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001121 TixWidget.__init__(self, master, 'tixMeter',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001122 ['options'], cnf, kw)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001123
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001124class NoteBook(TixWidget):
1125 """NoteBook - Multi-page container widget (tabbed notebook metaphor).
1126
Moshe Zadka22710822001-03-21 17:24:49 +00001127 Subwidgets Class
1128 ---------- -----
1129 nbframe NoteBookFrame
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001130 <pages> page widgets added dynamically with the add method"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001131
1132 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001133 TixWidget.__init__(self,master,'tixNoteBook', ['options'], cnf, kw)
1134 self.subwidget_list['nbframe'] = TixSubWidget(self, 'nbframe',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001135 destroy_physically=0)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001136
1137 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001138 apply(self.tk.call,
1139 (self._w, 'add', name) + self._options(cnf, kw))
1140 self.subwidget_list[name] = TixSubWidget(self, name)
1141 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001142
1143 def delete(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001144 self.tk.call(self._w, 'delete', name)
1145 self.subwidget_list[name].destroy()
1146 del self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001147
1148 def page(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001149 return self.subwidget(name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001150
1151 def pages(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001152 # Can't call subwidgets_all directly because we don't want .nbframe
1153 names = self.tk.split(self.tk.call(self._w, 'pages'))
1154 ret = []
1155 for x in names:
1156 ret.append(self.subwidget(x))
1157 return ret
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001158
Moshe Zadka22710822001-03-21 17:24:49 +00001159 def raise_page(self, name): # raise is a python keyword
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001160 self.tk.call(self._w, 'raise', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001161
1162 def raised(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001163 return self.tk.call(self._w, 'raised')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001164
1165class NoteBookFrame(TixWidget):
Martin v. Löwis46874282002-12-06 10:33:45 +00001166 # FIXME: This is dangerous to expose to be called on its own.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001167 pass
1168
1169class OptionMenu(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001170 """OptionMenu - creates a menu button of options.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001171
Moshe Zadka22710822001-03-21 17:24:49 +00001172 Subwidget Class
1173 --------- -----
Neal Norwitzf539bde2002-11-14 02:43:40 +00001174 menubutton Menubutton
1175 menu Menu"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001176
1177 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001178 TixWidget.__init__(self, master, 'tixOptionMenu', ['options'], cnf, kw)
1179 self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
1180 self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001181
1182 def add_command(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001183 apply(self.tk.call,
1184 (self._w, 'add', 'command', name) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001185
1186 def add_separator(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001187 apply(self.tk.call,
1188 (self._w, 'add', 'separator', name) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001189
1190 def delete(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001191 self.tk.call(self._w, 'delete', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001192
1193 def disable(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001194 self.tk.call(self._w, 'disable', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001195
1196 def enable(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001197 self.tk.call(self._w, 'enable', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001198
1199class PanedWindow(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001200 """PanedWindow - Multi-pane container widget
1201 allows the user to interactively manipulate the sizes of several
1202 panes. The panes can be arranged either vertically or horizontally.The
1203 user changes the sizes of the panes by dragging the resize handle
1204 between two panes.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001205
Moshe Zadka22710822001-03-21 17:24:49 +00001206 Subwidgets Class
1207 ---------- -----
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001208 <panes> g/p widgets added dynamically with the add method."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001209
1210 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001211 TixWidget.__init__(self, master, 'tixPanedWindow', ['orientation', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001212
Neal Norwitzf539bde2002-11-14 02:43:40 +00001213 # add delete forget panecget paneconfigure panes setsize
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001214 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001215 apply(self.tk.call,
1216 (self._w, 'add', name) + self._options(cnf, kw))
1217 self.subwidget_list[name] = TixSubWidget(self, name,
Neal Norwitzf539bde2002-11-14 02:43:40 +00001218 check_intermediate=0)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001219 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001220
Neal Norwitzf539bde2002-11-14 02:43:40 +00001221 def delete(self, name):
1222 self.tk.call(self._w, 'delete', name)
1223 self.subwidget_list[name].destroy()
1224 del self.subwidget_list[name]
1225
1226 def forget(self, name):
1227 self.tk.call(self._w, 'forget', name)
1228
1229 def panecget(self, entry, opt):
1230 return self.tk.call(self._w, 'panecget', entry, opt)
1231
1232 def paneconfigure(self, entry, cnf={}, **kw):
1233 if cnf is None:
1234 return _lst2dict(
1235 self.tk.split(
1236 self.tk.call(self._w, 'paneconfigure', entry)))
1237 apply(self.tk.call,
1238 (self._w, 'paneconfigure', entry) + self._options(cnf, kw))
1239
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001240 def panes(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001241 names = self.tk.call(self._w, 'panes')
1242 ret = []
1243 for x in names:
1244 ret.append(self.subwidget(x))
1245 return ret
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001246
1247class PopupMenu(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001248 """PopupMenu widget can be used as a replacement of the tk_popup command.
1249 The advantage of the Tix PopupMenu widget is it requires less application
1250 code to manipulate.
1251
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001252
Moshe Zadka22710822001-03-21 17:24:49 +00001253 Subwidgets Class
1254 ---------- -----
1255 menubutton Menubutton
1256 menu Menu"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001257
Martin v. Löwis46874282002-12-06 10:33:45 +00001258 # FIXME: It should inherit -superclass tixShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001259 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001260 TixWidget.__init__(self, master, 'tixPopupMenu', ['options'], cnf, kw)
1261 self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
1262 self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001263
1264 def bind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001265 self.tk.call(self._w, 'bind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001266
1267 def unbind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001268 self.tk.call(self._w, 'unbind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001269
1270 def post_widget(self, widget, x, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001271 self.tk.call(self._w, 'post', widget._w, x, y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001272
1273class ResizeHandle(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001274 """Internal widget to draw resize handles on Scrolled widgets."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001275 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001276 # There seems to be a Tix bug rejecting the configure method
1277 # Let's try making the flags -static
1278 flags = ['options', 'command', 'cursorfg', 'cursorbg',
1279 'handlesize', 'hintcolor', 'hintwidth',
1280 'x', 'y']
1281 # In fact, x y height width are configurable
1282 TixWidget.__init__(self, master, 'tixResizeHandle',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001283 flags, cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001284
1285 def attach_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001286 self.tk.call(self._w, 'attachwidget', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001287
Martin v. Löwis652e1912001-11-25 14:50:56 +00001288 def detach_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001289 self.tk.call(self._w, 'detachwidget', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001290
1291 def hide(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001292 self.tk.call(self._w, 'hide', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001293
1294 def show(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001295 self.tk.call(self._w, 'show', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001296
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001297class ScrolledHList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001298 """ScrolledHList - HList with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001299
Martin v. Löwis46874282002-12-06 10:33:45 +00001300 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001301 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001302 TixWidget.__init__(self, master, 'tixScrolledHList', ['options'],
Neal Norwitzf539bde2002-11-14 02:43:40 +00001303 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001304 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1305 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1306 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001307
1308class ScrolledListBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001309 """ScrolledListBox - Listbox with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001310
Martin v. Löwis46874282002-12-06 10:33:45 +00001311 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001312 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001313 TixWidget.__init__(self, master, 'tixScrolledListBox', ['options'], cnf, kw)
1314 self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
1315 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1316 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001317
1318class ScrolledText(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001319 """ScrolledText - Text with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001320
Martin v. Löwis46874282002-12-06 10:33:45 +00001321 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001322 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001323 TixWidget.__init__(self, master, 'tixScrolledText', ['options'], cnf, kw)
1324 self.subwidget_list['text'] = _dummyText(self, 'text')
1325 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1326 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001327
1328class ScrolledTList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001329 """ScrolledTList - TList with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001330
Martin v. Löwis46874282002-12-06 10:33:45 +00001331 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001332 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001333 TixWidget.__init__(self, master, 'tixScrolledTList', ['options'],
Neal Norwitzf539bde2002-11-14 02:43:40 +00001334 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001335 self.subwidget_list['tlist'] = _dummyTList(self, 'tlist')
1336 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1337 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001338
1339class ScrolledWindow(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001340 """ScrolledWindow - Window with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001341
Martin v. Löwis46874282002-12-06 10:33:45 +00001342 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001343 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001344 TixWidget.__init__(self, master, 'tixScrolledWindow', ['options'], cnf, kw)
1345 self.subwidget_list['window'] = _dummyFrame(self, 'window')
1346 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1347 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001348
1349class Select(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001350 """Select - Container of button subwidgets. It can be used to provide
1351 radio-box or check-box style of selection options for the user.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001352
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001353 Subwidgets are buttons added dynamically using the add method."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001354
Martin v. Löwis46874282002-12-06 10:33:45 +00001355 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001356 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001357 TixWidget.__init__(self, master, 'tixSelect',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001358 ['allowzero', 'radio', 'orientation', 'labelside',
1359 'options'],
1360 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001361 self.subwidget_list['label'] = _dummyLabel(self, 'label')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001362
1363 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001364 apply(self.tk.call,
1365 (self._w, 'add', name) + self._options(cnf, kw))
1366 self.subwidget_list[name] = _dummyButton(self, name)
1367 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001368
1369 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001370 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001371
Neal Norwitzf539bde2002-11-14 02:43:40 +00001372class Shell(TixWidget):
1373 """Toplevel window.
1374
1375 Subwidgets - None"""
1376
1377 def __init__ (self,master=None,cnf={}, **kw):
1378 TixWidget.__init__(self, master, 'tixShell', ['options', 'title'], cnf, kw)
1379
1380class DialogShell(TixWidget):
1381 """Toplevel window, with popup popdown and center methods.
1382 It tells the window manager that it is a dialog window and should be
1383 treated specially. The exact treatment depends on the treatment of
1384 the window manager.
1385
1386 Subwidgets - None"""
1387
Martin v. Löwis46874282002-12-06 10:33:45 +00001388 # FIXME: It should inherit from Shell
Neal Norwitzf539bde2002-11-14 02:43:40 +00001389 def __init__ (self,master=None,cnf={}, **kw):
1390 TixWidget.__init__(self, master,
1391 'tixDialogShell',
1392 ['options', 'title', 'mapped',
1393 'minheight', 'minwidth',
1394 'parent', 'transient'], cnf, kw)
1395
1396 def popdown(self):
1397 self.tk.call(self._w, 'popdown')
1398
1399 def popup(self):
1400 self.tk.call(self._w, 'popup')
1401
1402 def center(self):
1403 self.tk.call(self._w, 'center')
1404
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001405class StdButtonBox(TixWidget):
1406 """StdButtonBox - Standard Button Box (OK, Apply, Cancel and Help) """
1407
1408 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001409 TixWidget.__init__(self, master, 'tixStdButtonBox',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001410 ['orientation', 'options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001411 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1412 self.subwidget_list['apply'] = _dummyButton(self, 'apply')
1413 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1414 self.subwidget_list['help'] = _dummyButton(self, 'help')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001415
1416 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001417 if self.subwidget_list.has_key(name):
1418 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001419
1420class TList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001421 """TList - Hierarchy display widget which can be
1422 used to display data in a tabular format. The list entries of a TList
1423 widget are similar to the entries in the Tk listbox widget. The main
1424 differences are (1) the TList widget can display the list entries in a
1425 two dimensional format and (2) you can use graphical images as well as
1426 multiple colors and fonts for the list entries.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001427
1428 Subwidgets - None"""
1429
1430 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001431 TixWidget.__init__(self, master, 'tixTList', ['options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001432
1433 def active_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001434 self.tk.call(self._w, 'active', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001435
1436 def active_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001437 self.tk.call(self._w, 'active', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001438
1439 def anchor_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001440 self.tk.call(self._w, 'anchor', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001441
1442 def anchor_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001443 self.tk.call(self._w, 'anchor', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001444
1445 def delete(self, from_, to=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001446 self.tk.call(self._w, 'delete', from_, to)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001447
1448 def dragsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001449 self.tk.call(self._w, 'dragsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001450
1451 def dragsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001452 self.tk.call(self._w, 'dragsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001453
1454 def dropsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001455 self.tk.call(self._w, 'dropsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001456
1457 def dropsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001458 self.tk.call(self._w, 'dropsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001459
1460 def insert(self, index, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001461 apply(self.tk.call,
Neal Norwitzf539bde2002-11-14 02:43:40 +00001462 (self._w, 'insert', index) + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001463
1464 def info_active(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001465 return self.tk.call(self._w, 'info', 'active')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001466
1467 def info_anchor(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001468 return self.tk.call(self._w, 'info', 'anchor')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001469
1470 def info_down(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001471 return self.tk.call(self._w, 'info', 'down', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001472
1473 def info_left(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001474 return self.tk.call(self._w, 'info', 'left', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001475
1476 def info_right(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001477 return self.tk.call(self._w, 'info', 'right', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001478
1479 def info_selection(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001480 c = self.tk.call(self._w, 'info', 'selection')
1481 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001482
1483 def info_size(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001484 return self.tk.call(self._w, 'info', 'size')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001485
1486 def info_up(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001487 return self.tk.call(self._w, 'info', 'up', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001488
1489 def nearest(self, x, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001490 return self.tk.call(self._w, 'nearest', x, y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001491
1492 def see(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001493 self.tk.call(self._w, 'see', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001494
1495 def selection_clear(self, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001496 apply(self.tk.call,
1497 (self._w, 'selection', 'clear') + self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001498
1499 def selection_includes(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001500 return self.tk.call(self._w, 'selection', 'includes', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001501
1502 def selection_set(self, first, last=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001503 self.tk.call(self._w, 'selection', 'set', first, last)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001504
1505 def xview(self, *args):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001506 apply(self.tk.call, (self._w, 'xview') + args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001507
1508 def yview(self, *args):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001509 apply(self.tk.call, (self._w, 'yview') + args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001510
1511class Tree(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001512 """Tree - The tixTree widget can be used to display hierachical
1513 data in a tree form. The user can adjust
1514 the view of the tree by opening or closing parts of the tree."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001515
Martin v. Löwis46874282002-12-06 10:33:45 +00001516 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001517 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001518 TixWidget.__init__(self, master, 'tixTree',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001519 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001520 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1521 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1522 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001523
1524 def autosetmode(self):
Martin v. Löwis46874282002-12-06 10:33:45 +00001525 '''This command calls the setmode method for all the entries in this
1526 Tree widget: if an entry has no child entries, its mode is set to
1527 none. Otherwise, if the entry has any hidden child entries, its mode is
1528 set to open; otherwise its mode is set to close.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001529 self.tk.call(self._w, 'autosetmode')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001530
1531 def close(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001532 '''Close the entry given by entryPath if its mode is close.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001533 self.tk.call(self._w, 'close', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001534
1535 def getmode(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001536 '''Returns the current mode of the entry given by entryPath.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001537 return self.tk.call(self._w, 'getmode', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001538
1539 def open(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001540 '''Open the entry given by entryPath if its mode is open.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001541 self.tk.call(self._w, 'open', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001542
1543 def setmode(self, entrypath, mode='none'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001544 '''This command is used to indicate whether the entry given by
1545 entryPath has children entries and whether the children are visible. mode
1546 must be one of open, close or none. If mode is set to open, a (+)
1547 indicator is drawn next the the entry. If mode is set to close, a (-)
1548 indicator is drawn next the the entry. If mode is set to none, no
1549 indicators will be drawn for this entry. The default mode is none. The
1550 open mode indicates the entry has hidden children and this entry can be
1551 opened by the user. The close mode indicates that all the children of the
1552 entry are now visible and the entry can be closed by the user.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001553 self.tk.call(self._w, 'setmode', entrypath, mode)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001554
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001555
1556# Could try subclassing Tree for CheckList - would need another arg to init
1557class CheckList(TixWidget):
1558 """The CheckList widget
1559 displays a list of items to be selected by the user. CheckList acts
1560 similarly to the Tk checkbutton or radiobutton widgets, except it is
1561 capable of handling many more items than checkbuttons or radiobuttons.
1562 """
Martin v. Löwis46874282002-12-06 10:33:45 +00001563 # FIXME: It should inherit -superclass tixTree
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001564 def __init__(self, master=None, cnf={}, **kw):
1565 TixWidget.__init__(self, master, 'tixCheckList',
1566 ['options'], cnf, kw)
1567 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1568 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1569 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001570
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001571 def autosetmode(self):
Martin v. Löwis46874282002-12-06 10:33:45 +00001572 '''This command calls the setmode method for all the entries in this
1573 Tree widget: if an entry has no child entries, its mode is set to
1574 none. Otherwise, if the entry has any hidden child entries, its mode is
1575 set to open; otherwise its mode is set to close.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001576 self.tk.call(self._w, 'autosetmode')
1577
1578 def close(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001579 '''Close the entry given by entryPath if its mode is close.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001580 self.tk.call(self._w, 'close', entrypath)
1581
1582 def getmode(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001583 '''Returns the current mode of the entry given by entryPath.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001584 return self.tk.call(self._w, 'getmode', entrypath)
1585
1586 def open(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001587 '''Open the entry given by entryPath if its mode is open.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001588 self.tk.call(self._w, 'open', entrypath)
1589
1590 def getselection(self, mode='on'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001591 '''Returns a list of items whose status matches status. If status is
1592 not specified, the list of items in the "on" status will be returned.
1593 Mode can be on, off, default'''
1594 c = self.tk.split(self.tk.call(self._w, 'getselection', mode))
1595 return self.tk.splitlist(c)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001596
1597 def getstatus(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001598 '''Returns the current status of entryPath.'''
1599 return self.tk.call(self._w, 'getstatus', entrypath)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001600
1601 def setstatus(self, entrypath, mode='on'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001602 '''Sets the status of entryPath to be status. A bitmap will be
1603 displayed next to the entry its status is on, off or default.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001604 self.tk.call(self._w, 'setstatus', entrypath, mode)
1605
1606
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001607###########################################################################
1608### The subclassing below is used to instantiate the subwidgets in each ###
1609### mega widget. This allows us to access their methods directly. ###
1610###########################################################################
1611
1612class _dummyButton(Button, 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 _dummyCheckbutton(Checkbutton, 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 _dummyEntry(Entry, 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 _dummyFrame(Frame, 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 _dummyLabel(Label, 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 _dummyListbox(Listbox, 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 _dummyMenu(Menu, 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 _dummyMenubutton(Menubutton, 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 _dummyScrollbar(Scrollbar, 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 _dummyText(Text, 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)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001651
1652class _dummyScrolledListBox(ScrolledListBox, TixSubWidget):
1653 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001654 TixSubWidget.__init__(self, master, name, destroy_physically)
1655 self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
1656 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1657 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001658
1659class _dummyHList(HList, 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)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001662
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001663class _dummyScrolledHList(ScrolledHList, TixSubWidget):
1664 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001665 TixSubWidget.__init__(self, master, name, destroy_physically)
1666 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1667 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1668 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001669
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001670class _dummyTList(TList, 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)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001673
1674class _dummyComboBox(ComboBox, TixSubWidget):
1675 def __init__(self, master, name, destroy_physically=1):
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001676 TixSubWidget.__init__(self, master, name, ['fancy',destroy_physically])
1677 self.subwidget_list['label'] = _dummyLabel(self, 'label')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001678 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
1679 self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001680
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001681 self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001682 'slistbox')
1683 try:
1684 self.subwidget_list['tick'] = _dummyButton(self, 'tick')
1685 #cross Button : present if created with the fancy option
1686 self.subwidget_list['cross'] = _dummyButton(self, 'cross')
1687 except TypeError:
1688 # unavailable when -fancy not specified
1689 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001690
1691class _dummyDirList(DirList, TixSubWidget):
1692 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001693 TixSubWidget.__init__(self, master, name, destroy_physically)
1694 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1695 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1696 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001697
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001698class _dummyDirSelectBox(DirSelectBox, TixSubWidget):
1699 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001700 TixSubWidget.__init__(self, master, name, destroy_physically)
1701 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
1702 self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001703
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001704class _dummyExFileSelectBox(ExFileSelectBox, TixSubWidget):
1705 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001706 TixSubWidget.__init__(self, master, name, destroy_physically)
1707 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1708 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1709 self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
1710 self.subwidget_list['types'] = _dummyComboBox(self, 'types')
1711 self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
1712 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
1713 self.subwidget_list['file'] = _dummyComboBox(self, 'file')
1714 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001715
1716class _dummyFileSelectBox(FileSelectBox, 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['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
1720 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
1721 self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
1722 self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001723
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001724class _dummyFileComboBox(ComboBox, TixSubWidget):
1725 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001726 TixSubWidget.__init__(self, master, name, destroy_physically)
1727 self.subwidget_list['dircbx'] = _dummyComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001728
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001729class _dummyStdButtonBox(StdButtonBox, TixSubWidget):
1730 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001731 TixSubWidget.__init__(self, master, name, destroy_physically)
1732 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1733 self.subwidget_list['apply'] = _dummyButton(self, 'apply')
1734 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1735 self.subwidget_list['help'] = _dummyButton(self, 'help')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001736
1737class _dummyNoteBookFrame(NoteBookFrame, TixSubWidget):
1738 def __init__(self, master, name, destroy_physically=0):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001739 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001740
Martin v. Löwis01824bf2002-09-19 08:12:55 +00001741class _dummyPanedWindow(PanedWindow, TixSubWidget):
1742 def __init__(self, master, name, destroy_physically=1):
1743 TixSubWidget.__init__(self, master, name, destroy_physically)
1744
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001745########################
1746### Utility Routines ###
1747########################
1748
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001749#mike Should tixDestroy be exposed as a wrapper? - but not for widgets.
1750
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001751def OptionName(widget):
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001752 '''Returns the qualified path name for the widget. Normally used to set
1753 default options for subwidgets. See tixwidgets.py'''
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001754 return widget.tk.call('tixOptionName', widget._w)
1755
1756# Called with a dictionary argument of the form
1757# {'*.c':'C source files', '*.txt':'Text Files', '*':'All files'}
1758# returns a string which can be used to configure the fsbox file types
1759# in an ExFileSelectBox. i.e.,
1760# '{{*} {* - All files}} {{*.c} {*.c - C source files}} {{*.txt} {*.txt - Text Files}}'
1761def FileTypeList(dict):
1762 s = ''
1763 for type in dict.keys():
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001764 s = s + '{{' + type + '} {' + type + ' - ' + dict[type] + '}} '
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001765 return s
1766
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001767# Still to be done:
Martin v. Löwis46874282002-12-06 10:33:45 +00001768# tixIconView
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001769class CObjView(TixWidget):
1770 """This file implements the Canvas Object View widget. This is a base
1771 class of IconView. It implements automatic placement/adjustment of the
1772 scrollbars according to the canvas objects inside the canvas subwidget.
1773 The scrollbars are adjusted so that the canvas is just large enough
1774 to see all the objects.
1775 """
Martin v. Löwis46874282002-12-06 10:33:45 +00001776 # FIXME: It should inherit -superclass tixScrolledWidget
1777 pass
1778
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001779class Grid(TixWidget):
1780 '''The Tix Grid command creates a new window and makes it into a
1781 tixGrid widget. Additional options, may be specified on the command
1782 line or in the option database to configure aspects such as its cursor
1783 and relief.
1784
1785 A Grid widget displays its contents in a two dimensional grid of cells.
1786 Each cell may contain one Tix display item, which may be in text,
1787 graphics or other formats. See the DisplayStyle class for more information
1788 about Tix display items. Individual cells, or groups of cells, can be
1789 formatted with a wide range of attributes, such as its color, relief and
1790 border.
1791
1792 Subwidgets - None'''
1793 pass
1794
1795 # def anchor option ?args ...?
1796 # def bdtype
1797 # def delete dim from ?to?
1798 # def edit apply
1799 # def edit set x y
1800 # def entrycget x y option
1801 # def entryconfigure x y ?option? ?value option value ...?
1802 # def format
1803 # def index
1804 # def move dim from to offset
1805 # def set x y ?-itemtype type? ?option value...?
1806 # def size dim index ?option value ...?
1807 # def unset x y
1808 # def xview
1809 # def yview
1810
Martin v. Löwis46874282002-12-06 10:33:45 +00001811class ScrolledGrid(TixWidget):
1812 '''Scrolled Grid widgets'''
1813
1814 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001815 pass