blob: 99731cdcbffd7d347f1cbc812ab9c96cb04cbe52 [file] [log] [blame]
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00002#
3# $Id$
4#
Martin v. Löwisb7b32602001-11-02 23:48:20 +00005# Tix.py -- Tix widget wrappers.
6#
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00007# For Tix, see http://tix.sourceforge.net
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00008#
Moshe Zadka22710822001-03-21 17:24:49 +00009# - Sudhir Shenoy (sshenoy@gol.com), Dec. 1995.
Martin v. Löwisb7b32602001-11-02 23:48:20 +000010# based on an idea of Jean-Marc Lugrin (lugrin@ms.com)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000011#
12# NOTE: In order to minimize changes to Tkinter.py, some of the code here
Moshe Zadka22710822001-03-21 17:24:49 +000013# (TixWidget.__init__) has been taken from Tkinter (Widget.__init__)
14# and will break if there are major changes in Tkinter.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000015#
16# The Tix widgets are represented by a class hierarchy in python with proper
17# inheritance of base classes.
18#
19# As a result after creating a 'w = StdButtonBox', I can write
Moshe Zadka22710822001-03-21 17:24:49 +000020# w.ok['text'] = 'Who Cares'
21# or w.ok['bg'] = w['bg']
22# or even w.ok.invoke()
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000023# etc.
24#
25# Compare the demo tixwidgets.py to the original Tcl program and you will
26# appreciate the advantages.
27#
28
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000029from Tkinter import *
30from Tkinter import _flatten, _cnfmerge, _default_root
31
32# WARNING - TkVersion is a limited precision floating point number
33if TkVersion < 3.999:
34 raise ImportError, "This version of Tix.py requires Tk 4.0 or higher"
35
36import _tkinter # If this fails your Python may not be configured for Tk
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000037
38# Some more constants (for consistency with Tkinter)
39WINDOW = 'window'
40TEXT = 'text'
41STATUS = 'status'
42IMMEDIATE = 'immediate'
43IMAGE = 'image'
44IMAGETEXT = 'imagetext'
45BALLOON = 'balloon'
46AUTO = 'auto'
47ACROSSTOP = 'acrosstop'
48
Fred Drake723293c2001-12-13 04:53:07 +000049# Some constants used by Tkinter dooneevent()
50TCL_DONT_WAIT = 1 << 1
51TCL_WINDOW_EVENTS = 1 << 2
52TCL_FILE_EVENTS = 1 << 3
53TCL_TIMER_EVENTS = 1 << 4
54TCL_IDLE_EVENTS = 1 << 5
55TCL_ALL_EVENTS = 0
56
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +000057# BEWARE - this is implemented by copying some code from the Widget class
58# in Tkinter (to override Widget initialization) and is therefore
59# liable to break.
60import Tkinter, os
Martin v. Löwisb7b32602001-11-02 23:48:20 +000061
62# Could probably add this to Tkinter.Misc
63class tixCommand:
Fred Drake723293c2001-12-13 04:53:07 +000064 """The tix commands provide access to miscellaneous elements
Martin v. Löwisb7b32602001-11-02 23:48:20 +000065 of Tix's internal state and the Tix application context.
Fred Drake723293c2001-12-13 04:53:07 +000066 Most of the information manipulated by these commands pertains
67 to the application as a whole, or to a screen or
68 display, rather than to a particular window.
Martin v. Löwisb7b32602001-11-02 23:48:20 +000069
70 This is a mixin class, assumed to be mixed to Tkinter.Tk
71 that supports the self.tk.call method.
72 """
Fred Drake723293c2001-12-13 04:53:07 +000073
Martin v. Löwisb7b32602001-11-02 23:48:20 +000074 def tix_addbitmapdir(self, directory):
Fred Drake723293c2001-12-13 04:53:07 +000075 """Tix maintains a list of directories under which
Martin v. Löwisb7b32602001-11-02 23:48:20 +000076 the tix_getimage and tix_getbitmap commands will
Fred Drake723293c2001-12-13 04:53:07 +000077 search for image files. The standard bitmap directory
78 is $TIX_LIBRARY/bitmaps. The addbitmapdir command
79 adds directory into this list. By using this
Martin v. Löwisb7b32602001-11-02 23:48:20 +000080 command, the image files of an applications can
81 also be located using the tix_getimage or tix_getbitmap
82 command.
83 """
84 return self.tk.call('tix', 'addbitmapdir', directory)
85
86 def tix_cget(self, option):
87 """Returns the current value of the configuration
88 option given by option. Option may be any of the
89 options described in the CONFIGURATION OPTIONS section.
90 """
91 return self.tk.call('tix', 'cget', option)
92
93 def tix_configure(self, cnf=None, **kw):
Fred Drake723293c2001-12-13 04:53:07 +000094 """Query or modify the configuration options of the Tix application
95 context. If no option is specified, returns a dictionary all of the
96 available options. If option is specified with no value, then the
97 command returns a list describing the one named option (this list
98 will be identical to the corresponding sublist of the value
99 returned if no option is specified). If one or more option-value
100 pairs are specified, then the command modifies the given option(s)
101 to have the given value(s); in this case the command returns an
102 empty string. Option may be any of the configuration options.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000103 """
Fred Drake723293c2001-12-13 04:53:07 +0000104 # Copied from Tkinter.py
105 if kw:
106 cnf = _cnfmerge((cnf, kw))
107 elif cnf:
108 cnf = _cnfmerge(cnf)
109 if cnf is None:
110 cnf = {}
111 for x in self.tk.split(self.tk.call('tix', 'configure')):
112 cnf[x[0][1:]] = (x[0][1:],) + x[1:]
113 return cnf
114 if isinstance(cnf, StringType):
115 x = self.tk.split(self.tk.call('tix', 'configure', '-'+cnf))
116 return (x[0][1:],) + x[1:]
117 return self.tk.call(('tix', 'configure') + self._options(cnf))
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000118
119 def tix_filedialog(self, dlgclass=None):
Fred Drake723293c2001-12-13 04:53:07 +0000120 """Returns the file selection dialog that may be shared among
121 different calls from this application. This command will create a
122 file selection dialog widget when it is called the first time. This
123 dialog will be returned by all subsequent calls to tix_filedialog.
124 An optional dlgclass parameter can be passed to specified what type
125 of file selection dialog widget is desired. Possible options are
126 tix FileSelectDialog or tixExFileSelectDialog.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000127 """
128 if dlgclass is not None:
129 return self.tk.call('tix', 'filedialog', dlgclass)
130 else:
131 return self.tk.call('tix', 'filedialog')
132
133 def tix_getbitmap(self, name):
Fred Drake723293c2001-12-13 04:53:07 +0000134 """Locates a bitmap file of the name name.xpm or name in one of the
135 bitmap directories (see the tix_addbitmapdir command above). By
136 using tix_getbitmap, you can avoid hard coding the pathnames of the
137 bitmap files in your application. When successful, it returns the
138 complete pathname of the bitmap file, prefixed with the character
139 '@'. The returned value can be used to configure the -bitmap
140 option of the TK and Tix widgets.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000141 """
142 return self.tk.call('tix', 'getbitmap', name)
143
144 def tix_getimage(self, name):
Fred Drake723293c2001-12-13 04:53:07 +0000145 """Locates an image file of the name name.xpm, name.xbm or name.ppm
146 in one of the bitmap directories (see the addbitmapdir command
147 above). If more than one file with the same name (but different
148 extensions) exist, then the image type is chosen according to the
149 depth of the X display: xbm images are chosen on monochrome
150 displays and color images are chosen on color displays. By using
151 tix_ getimage, you can advoid hard coding the pathnames of the
152 image files in your application. When successful, this command
153 returns the name of the newly created image, which can be used to
154 configure the -image option of the Tk and Tix widgets.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000155 """
156 return self.tk.call('tix', 'getimage', name)
157
158 def tix_option_get(self, name):
159 """Gets the options manitained by the Tix
Fred Drake723293c2001-12-13 04:53:07 +0000160 scheme mechanism. Available options include:
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000161
162 active_bg active_fg bg
163 bold_font dark1_bg dark1_fg
164 dark2_bg dark2_fg disabled_fg
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000165 fg fixed_font font
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000166 inactive_bg inactive_fg input1_bg
167 input2_bg italic_font light1_bg
168 light1_fg light2_bg light2_fg
169 menu_font output1_bg output2_bg
170 select_bg select_fg selector
171 """
172 # could use self.tk.globalgetvar('tixOption', name)
173 return self.tk.call('tix', 'option', 'get', name)
174
175 def tix_resetoptions(self, newScheme, newFontSet, newScmPrio=None):
Fred Drake723293c2001-12-13 04:53:07 +0000176 """Resets the scheme and fontset of the Tix application to
177 newScheme and newFontSet, respectively. This affects only those
178 widgets created after this call. Therefore, it is best to call the
179 resetoptions command before the creation of any widgets in a Tix
180 application.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000181
Fred Drake723293c2001-12-13 04:53:07 +0000182 The optional parameter newScmPrio can be given to reset the
183 priority level of the Tk options set by the Tix schemes.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000184
Fred Drake723293c2001-12-13 04:53:07 +0000185 Because of the way Tk handles the X option database, after Tix has
186 been has imported and inited, it is not possible to reset the color
187 schemes and font sets using the tix config command. Instead, the
188 tix_resetoptions command must be used.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000189 """
190 if newScmPrio is not None:
191 return self.tk.call('tix', 'resetoptions', newScheme, newFontSet, newScmPrio)
192 else:
193 return self.tk.call('tix', 'resetoptions', newScheme, newFontSet)
194
195class Tk(Tkinter.Tk, tixCommand):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000196 """Toplevel widget of Tix which represents mostly the main window
197 of an application. It has an associated Tcl interpreter."""
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000198 def __init__(self, screenName=None, baseName=None, className='Tix'):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000199 Tkinter.Tk.__init__(self, screenName, baseName, className)
Moshe Zadka22710822001-03-21 17:24:49 +0000200 tixlib = os.environ.get('TIX_LIBRARY')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000201 self.tk.eval('global auto_path; lappend auto_path [file dir [info nameof]]')
Moshe Zadka22710822001-03-21 17:24:49 +0000202 if tixlib is not None:
203 self.tk.eval('global auto_path; lappend auto_path {%s}' % tixlib)
204 self.tk.eval('global tcl_pkgPath; lappend tcl_pkgPath {%s}' % tixlib)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000205 # Load Tix - this should work dynamically or statically
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +0000206 # If it's static, tcl/tix8.1/pkgIndex.tcl should have
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000207 # 'load {} Tix'
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +0000208 # If it's dynamic under Unix, tcl/tix8.1/pkgIndex.tcl should have
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000209 # 'load libtix8.1.8.3.so Tix'
Moshe Zadka22710822001-03-21 17:24:49 +0000210 self.tk.eval('package require Tix')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000211
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +0000212 def destroy(self):
213 # For safety, remove an delete_window binding before destroy
214 self.protocol("WM_DELETE_WINDOW", "")
215 Tkinter.Tk.destroy(self)
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000216
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000217# The Tix 'tixForm' geometry manager
218class Form:
219 """The Tix Form geometry manager
220
221 Widgets can be arranged by specifying attachments to other widgets.
222 See Tix documentation for complete details"""
223
224 def config(self, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000225 self.tk.call('tixForm', self._w, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000226
227 form = config
228
229 def __setitem__(self, key, value):
Guido van Rossum49fa2bd2001-08-13 14:12:35 +0000230 Form.form(self, {key: value})
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000231
232 def check(self):
233 return self.tk.call('tixForm', 'check', self._w)
234
235 def forget(self):
236 self.tk.call('tixForm', 'forget', self._w)
237
238 def grid(self, xsize=0, ysize=0):
239 if (not xsize) and (not ysize):
240 x = self.tk.call('tixForm', 'grid', self._w)
241 y = self.tk.splitlist(x)
242 z = ()
243 for x in y:
244 z = z + (self.tk.getint(x),)
245 return z
Martin v. Löwis46874282002-12-06 10:33:45 +0000246 return self.tk.call('tixForm', 'grid', self._w, xsize, ysize)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000247
248 def info(self, option=None):
249 if not option:
250 return self.tk.call('tixForm', 'info', self._w)
251 if option[0] != '-':
252 option = '-' + option
253 return self.tk.call('tixForm', 'info', self._w, option)
254
255 def slaves(self):
256 return map(self._nametowidget,
257 self.tk.splitlist(
258 self.tk.call(
259 'tixForm', 'slaves', self._w)))
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000260
261
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000262
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000263Tkinter.Widget.__bases__ = Tkinter.Widget.__bases__ + (Form,)
264
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000265class TixWidget(Tkinter.Widget):
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000266 """A TixWidget class is used to package all (or most) Tix widgets.
267
268 Widget initialization is extended in two ways:
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000269 1) It is possible to give a list of options which must be part of
Moshe Zadka22710822001-03-21 17:24:49 +0000270 the creation command (so called Tix 'static' options). These cannot be
271 given as a 'config' command later.
272 2) It is possible to give the name of an existing TK widget. These are
273 child widgets created automatically by a Tix mega-widget. The Tk call
274 to create these widgets is therefore bypassed in TixWidget.__init__
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000275
276 Both options are for use by subclasses only.
277 """
278 def __init__ (self, master=None, widgetName=None,
Moshe Zadka22710822001-03-21 17:24:49 +0000279 static_options=None, cnf={}, kw={}):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000280 # Merge keywords and dictionary arguments
281 if kw:
Moshe Zadka22710822001-03-21 17:24:49 +0000282 cnf = _cnfmerge((cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000283 else:
284 cnf = _cnfmerge(cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000285
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000286 # Move static options into extra. static_options must be
287 # a list of keywords (or None).
288 extra=()
Neal Norwitzf539bde2002-11-14 02:43:40 +0000289
290 # 'options' is always a static option
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000291 if static_options:
Neal Norwitzf539bde2002-11-14 02:43:40 +0000292 static_options.append('options')
293 else:
294 static_options = ['options']
Raymond Hettingerff41c482003-04-06 09:01:11 +0000295
Neal Norwitzf539bde2002-11-14 02:43:40 +0000296 for k,v in cnf.items()[:]:
297 if k in static_options:
298 extra = extra + ('-' + k, v)
299 del cnf[k]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000300
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000301 self.widgetName = widgetName
302 Widget._setup(self, master, cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000303
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000304 # If widgetName is None, this is a dummy creation call where the
305 # corresponding Tk widget has already been created by Tix
306 if widgetName:
Raymond Hettingerff41c482003-04-06 09:01:11 +0000307 self.tk.call(widgetName, self._w, *extra)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000308
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000309 # Non-static options - to be done via a 'config' command
310 if cnf:
311 Widget.config(self, cnf)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000312
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000313 # Dictionary to hold subwidget names for easier access. We can't
314 # use the children list because the public Tix names may not be the
315 # same as the pathname component
316 self.subwidget_list = {}
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000317
318 # We set up an attribute access function so that it is possible to
319 # do w.ok['text'] = 'Hello' rather than w.subwidget('ok')['text'] = 'Hello'
320 # when w is a StdButtonBox.
321 # We can even do w.ok.invoke() because w.ok is subclassed from the
322 # Button class if you go through the proper constructors
323 def __getattr__(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000324 if self.subwidget_list.has_key(name):
325 return self.subwidget_list[name]
326 raise AttributeError, name
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000327
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000328 def set_silent(self, value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000329 """Set a variable without calling its action routine"""
330 self.tk.call('tixSetSilent', self._w, value)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000331
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000332 def subwidget(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000333 """Return the named subwidget (which must have been created by
334 the sub-class)."""
335 n = self._subwidget_name(name)
336 if not n:
337 raise TclError, "Subwidget " + name + " not child of " + self._name
338 # Remove header of name and leading dot
339 n = n[len(self._w)+1:]
340 return self._nametowidget(n)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000341
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000342 def subwidgets_all(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000343 """Return all subwidgets."""
344 names = self._subwidget_names()
345 if not names:
346 return []
347 retlist = []
348 for name in names:
349 name = name[len(self._w)+1:]
350 try:
351 retlist.append(self._nametowidget(name))
352 except:
353 # some of the widgets are unknown e.g. border in LabelFrame
354 pass
355 return retlist
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000356
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000357 def _subwidget_name(self,name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000358 """Get a subwidget name (returns a String, not a Widget !)"""
359 try:
360 return self.tk.call(self._w, 'subwidget', name)
361 except TclError:
362 return None
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000363
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000364 def _subwidget_names(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000365 """Return the name of all subwidgets."""
366 try:
367 x = self.tk.call(self._w, 'subwidgets', '-all')
368 return self.tk.split(x)
369 except TclError:
370 return None
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000371
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000372 def config_all(self, option, value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000373 """Set configuration options for all subwidgets (and self)."""
374 if option == '':
375 return
376 elif not isinstance(option, StringType):
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
Raymond Hettingerff41c482003-04-06 09:01:11 +0000477 self.stylename = self.tk.call('tixDisplayStyle', itemtype,
478 *self._options(cnf,kw) )
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000479
480 def __str__(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000481 return self.stylename
482
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000483 def _options(self, cnf, kw ):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000484 if kw and cnf:
485 cnf = _cnfmerge((cnf, kw))
486 elif kw:
487 cnf = kw
488 opts = ()
489 for k, v in cnf.items():
490 opts = opts + ('-'+k, v)
491 return opts
492
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000493 def delete(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000494 self.tk.call(self.stylename, 'delete')
495
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000496 def __setitem__(self,key,value):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000497 self.tk.call(self.stylename, 'configure', '-%s'%key, value)
498
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000499 def config(self, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000500 return _lst2dict(
501 self.tk.split(
Raymond Hettingerff41c482003-04-06 09:01:11 +0000502 self.tk.call(
503 self.stylename, 'configure', *self._options(cnf,kw))))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000504
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000505 def __getitem__(self,key):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000506 return self.tk.call(self.stylename, 'cget', '-%s'%key)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000507
508
509######################################################
510### The Tix Widget classes - in alphabetical order ###
511######################################################
512
513class Balloon(TixWidget):
514 """Balloon help widget.
515
Moshe Zadka22710822001-03-21 17:24:49 +0000516 Subwidget Class
517 --------- -----
Fred Drake723293c2001-12-13 04:53:07 +0000518 label Label
519 message Message"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000520
Martin v. Löwis46874282002-12-06 10:33:45 +0000521 # FIXME: It should inherit -superclass tixShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000522 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis652e1912001-11-25 14:50:56 +0000523 # static seem to be -installcolormap -initwait -statusbar -cursor
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000524 static = ['options', 'installcolormap', 'initwait', 'statusbar',
525 'cursor']
526 TixWidget.__init__(self, master, 'tixBalloon', static, cnf, kw)
527 self.subwidget_list['label'] = _dummyLabel(self, 'label',
528 destroy_physically=0)
529 self.subwidget_list['message'] = _dummyLabel(self, 'message',
530 destroy_physically=0)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000531
532 def bind_widget(self, widget, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000533 """Bind balloon widget to another.
534 One balloon widget may be bound to several widgets at the same time"""
Raymond Hettingerff41c482003-04-06 09:01:11 +0000535 self.tk.call(self._w, 'bind', widget._w, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000536
537 def unbind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000538 self.tk.call(self._w, 'unbind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000539
540class ButtonBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000541 """ButtonBox - A container for pushbuttons.
542 Subwidgets are the buttons added with the add method.
543 """
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000544 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000545 TixWidget.__init__(self, master, 'tixButtonBox',
546 ['orientation', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000547
548 def add(self, name, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000549 """Add a button with given name to box."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000550
Raymond Hettingerff41c482003-04-06 09:01:11 +0000551 btn = self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000552 self.subwidget_list[name] = _dummyButton(self, name)
553 return btn
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000554
555 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000556 if self.subwidget_list.has_key(name):
557 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000558
559class ComboBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000560 """ComboBox - an Entry field with a dropdown menu. The user can select a
561 choice by either typing in the entry subwdget or selecting from the
562 listbox subwidget.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000563
Moshe Zadka22710822001-03-21 17:24:49 +0000564 Subwidget Class
565 --------- -----
566 entry Entry
567 arrow Button
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000568 slistbox ScrolledListBox
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000569 tick Button
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000570 cross Button : present if created with the fancy option"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000571
Martin v. Löwis46874282002-12-06 10:33:45 +0000572 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000573 def __init__ (self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000574 TixWidget.__init__(self, master, 'tixComboBox',
575 ['editable', 'dropdown', 'fancy', 'options'],
576 cnf, kw)
577 self.subwidget_list['label'] = _dummyLabel(self, 'label')
578 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
579 self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
580 self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
581 'slistbox')
582 try:
583 self.subwidget_list['tick'] = _dummyButton(self, 'tick')
584 self.subwidget_list['cross'] = _dummyButton(self, 'cross')
585 except TypeError:
586 # unavailable when -fancy not specified
587 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000588
Neal Norwitz731a9862002-12-10 02:18:49 +0000589 # align
Raymond Hettingerff41c482003-04-06 09:01:11 +0000590
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000591 def add_history(self, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000592 self.tk.call(self._w, 'addhistory', str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000593
594 def append_history(self, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000595 self.tk.call(self._w, 'appendhistory', str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000596
597 def insert(self, index, str):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000598 self.tk.call(self._w, 'insert', index, str)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000599
600 def pick(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000601 self.tk.call(self._w, 'pick', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000602
603class Control(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000604 """Control - An entry field with value change arrows. The user can
605 adjust the value by pressing the two arrow buttons or by entering
606 the value directly into the entry. The new value will be checked
607 against the user-defined upper and lower limits.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000608
Moshe Zadka22710822001-03-21 17:24:49 +0000609 Subwidget Class
610 --------- -----
611 incr Button
612 decr Button
613 entry Entry
614 label Label"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000615
Martin v. Löwis46874282002-12-06 10:33:45 +0000616 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000617 def __init__ (self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000618 TixWidget.__init__(self, master, 'tixControl', ['options'], cnf, kw)
619 self.subwidget_list['incr'] = _dummyButton(self, 'incr')
620 self.subwidget_list['decr'] = _dummyButton(self, 'decr')
621 self.subwidget_list['label'] = _dummyLabel(self, 'label')
622 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000623
624 def decrement(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000625 self.tk.call(self._w, 'decr')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000626
627 def increment(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000628 self.tk.call(self._w, 'incr')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000629
630 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000631 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000632
633 def update(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000634 self.tk.call(self._w, 'update')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000635
636class DirList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000637 """DirList - displays a list view of a directory, its previous
638 directories and its sub-directories. The user can choose one of
639 the directories displayed in the list or change to another directory.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000640
Moshe Zadka22710822001-03-21 17:24:49 +0000641 Subwidget Class
642 --------- -----
643 hlist HList
644 hsb Scrollbar
645 vsb Scrollbar"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000646
Martin v. Löwis46874282002-12-06 10:33:45 +0000647 # FIXME: It should inherit -superclass tixScrolledHList
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000648 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000649 TixWidget.__init__(self, master, 'tixDirList', ['options'], cnf, kw)
650 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
651 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
652 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000653
654 def chdir(self, dir):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000655 self.tk.call(self._w, 'chdir', dir)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000656
657class DirTree(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000658 """DirTree - Directory Listing in a hierarchical view.
659 Displays a tree view of a directory, its previous directories and its
660 sub-directories. The user can choose one of the directories displayed
661 in the list or change to another directory.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000662
Moshe Zadka22710822001-03-21 17:24:49 +0000663 Subwidget Class
664 --------- -----
Neal Norwitzf539bde2002-11-14 02:43:40 +0000665 hlist HList
666 hsb Scrollbar
667 vsb Scrollbar"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000668
Martin v. Löwis46874282002-12-06 10:33:45 +0000669 # FIXME: It should inherit -superclass tixScrolledHList
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000670 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000671 TixWidget.__init__(self, master, 'tixDirTree', ['options'], cnf, kw)
672 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
673 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
674 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000675
676 def chdir(self, dir):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000677 self.tk.call(self._w, 'chdir', dir)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000678
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000679class DirSelectBox(TixWidget):
680 """DirSelectBox - Motif style file select box.
681 It is generally used for
682 the user to choose a file. FileSelectBox stores the files mostly
683 recently selected into a ComboBox widget so that they can be quickly
684 selected again.
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000685
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000686 Subwidget Class
687 --------- -----
688 selection ComboBox
Neal Norwitzf539bde2002-11-14 02:43:40 +0000689 filter ComboBox
690 dirlist ScrolledListBox
691 filelist ScrolledListBox"""
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000692
693 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000694 TixWidget.__init__(self, master, 'tixDirSelectBox', ['options'], cnf, kw)
695 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
696 self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000697
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000698class ExFileSelectBox(TixWidget):
699 """ExFileSelectBox - MS Windows style file select box.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000700 It provides an convenient method for the user to select files.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000701
Moshe Zadka22710822001-03-21 17:24:49 +0000702 Subwidget Class
703 --------- -----
704 cancel Button
705 ok Button
706 hidden Checkbutton
707 types ComboBox
708 dir ComboBox
709 file ComboBox
710 dirlist ScrolledListBox
711 filelist ScrolledListBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000712
713 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000714 TixWidget.__init__(self, master, 'tixExFileSelectBox', ['options'], cnf, kw)
715 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
716 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
717 self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
718 self.subwidget_list['types'] = _dummyComboBox(self, 'types')
719 self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
720 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
721 self.subwidget_list['file'] = _dummyComboBox(self, 'file')
722 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000723
724 def filter(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000725 self.tk.call(self._w, 'filter')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000726
727 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000728 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000729
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000730
731# Should inherit from a Dialog class
732class DirSelectDialog(TixWidget):
733 """The DirSelectDialog widget presents the directories in the file
734 system in a dialog window. The user can use this dialog window to
735 navigate through the file system to select the desired directory.
736
737 Subwidgets Class
738 ---------- -----
739 dirbox DirSelectDialog"""
740
Martin v. Löwis46874282002-12-06 10:33:45 +0000741 # FIXME: It should inherit -superclass tixDialogShell
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000742 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000743 TixWidget.__init__(self, master, 'tixDirSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000744 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000745 self.subwidget_list['dirbox'] = _dummyDirSelectBox(self, 'dirbox')
746 # cancel and ok buttons are missing
747
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000748 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000749 self.tk.call(self._w, 'popup')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000750
751 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000752 self.tk.call(self._w, 'popdown')
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000753
754
755# Should inherit from a Dialog class
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000756class ExFileSelectDialog(TixWidget):
757 """ExFileSelectDialog - MS Windows style file select dialog.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000758 It provides an convenient method for the user to select files.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000759
Moshe Zadka22710822001-03-21 17:24:49 +0000760 Subwidgets Class
761 ---------- -----
762 fsbox ExFileSelectBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000763
Martin v. Löwis46874282002-12-06 10:33:45 +0000764 # FIXME: It should inherit -superclass tixDialogShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000765 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000766 TixWidget.__init__(self, master, 'tixExFileSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000767 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000768 self.subwidget_list['fsbox'] = _dummyExFileSelectBox(self, 'fsbox')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000769
770 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000771 self.tk.call(self._w, 'popup')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000772
773 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000774 self.tk.call(self._w, 'popdown')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000775
776class FileSelectBox(TixWidget):
777 """ExFileSelectBox - Motif style file select box.
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000778 It is generally used for
779 the user to choose a file. FileSelectBox stores the files mostly
780 recently selected into a ComboBox widget so that they can be quickly
781 selected again.
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000782
Moshe Zadka22710822001-03-21 17:24:49 +0000783 Subwidget Class
784 --------- -----
785 selection ComboBox
Neal Norwitzf539bde2002-11-14 02:43:40 +0000786 filter ComboBox
787 dirlist ScrolledListBox
788 filelist ScrolledListBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000789
790 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000791 TixWidget.__init__(self, master, 'tixFileSelectBox', ['options'], cnf, kw)
792 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
793 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
794 self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
795 self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000796
Moshe Zadka22710822001-03-21 17:24:49 +0000797 def apply_filter(self): # name of subwidget is same as command
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000798 self.tk.call(self._w, 'filter')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000799
800 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000801 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000802
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000803# Should inherit from a Dialog class
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000804class FileSelectDialog(TixWidget):
805 """FileSelectDialog - Motif style file select dialog.
806
Moshe Zadka22710822001-03-21 17:24:49 +0000807 Subwidgets Class
808 ---------- -----
809 btns StdButtonBox
810 fsbox FileSelectBox"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000811
Martin v. Löwis46874282002-12-06 10:33:45 +0000812 # FIXME: It should inherit -superclass tixStdDialogShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000813 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000814 TixWidget.__init__(self, master, 'tixFileSelectDialog',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000815 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000816 self.subwidget_list['btns'] = _dummyStdButtonBox(self, 'btns')
817 self.subwidget_list['fsbox'] = _dummyFileSelectBox(self, 'fsbox')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000818
819 def popup(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000820 self.tk.call(self._w, 'popup')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000821
822 def popdown(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000823 self.tk.call(self._w, 'popdown')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000824
825class FileEntry(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000826 """FileEntry - Entry field with button that invokes a FileSelectDialog.
827 The user can type in the filename manually. Alternatively, the user can
828 press the button widget that sits next to the entry, which will bring
829 up a file selection dialog.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000830
Moshe Zadka22710822001-03-21 17:24:49 +0000831 Subwidgets Class
832 ---------- -----
833 button Button
834 entry Entry"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000835
Martin v. Löwis46874282002-12-06 10:33:45 +0000836 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000837 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000838 TixWidget.__init__(self, master, 'tixFileEntry',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000839 ['dialogtype', 'options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000840 self.subwidget_list['button'] = _dummyButton(self, 'button')
841 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000842
843 def invoke(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000844 self.tk.call(self._w, 'invoke')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000845
846 def file_dialog(self):
Martin v. Löwis46874282002-12-06 10:33:45 +0000847 # FIXME: return python object
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000848 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000849
850class HList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +0000851 """HList - Hierarchy display widget can be used to display any data
852 that have a hierarchical structure, for example, file system directory
853 trees. The list entries are indented and connected by branch lines
854 according to their places in the hierachy.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000855
856 Subwidgets - None"""
857
858 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000859 TixWidget.__init__(self, master, 'tixHList',
Neal Norwitzf539bde2002-11-14 02:43:40 +0000860 ['columns', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000861
862 def add(self, entry, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000863 return self.tk.call(self._w, 'add', entry, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000864
865 def add_child(self, parent=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000866 if not parent:
867 parent = ''
Raymond Hettingerff41c482003-04-06 09:01:11 +0000868 return self.tk.call(
869 self._w, 'addchild', parent, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000870
871 def anchor_set(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000872 self.tk.call(self._w, 'anchor', 'set', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000873
874 def anchor_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000875 self.tk.call(self._w, 'anchor', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000876
877 def column_width(self, col=0, width=None, chars=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000878 if not chars:
879 return self.tk.call(self._w, 'column', 'width', col, width)
880 else:
881 return self.tk.call(self._w, 'column', 'width', col,
Neal Norwitzf539bde2002-11-14 02:43:40 +0000882 '-char', chars)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000883
884 def delete_all(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000885 self.tk.call(self._w, 'delete', 'all')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000886
887 def delete_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000888 self.tk.call(self._w, 'delete', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000889
890 def delete_offsprings(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000891 self.tk.call(self._w, 'delete', 'offsprings', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000892
893 def delete_siblings(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000894 self.tk.call(self._w, 'delete', 'siblings', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000895
896 def dragsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000897 self.tk.call(self._w, 'dragsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000898
899 def dragsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000900 self.tk.call(self._w, 'dragsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000901
902 def dropsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000903 self.tk.call(self._w, 'dropsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000904
905 def dropsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000906 self.tk.call(self._w, 'dropsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000907
908 def header_create(self, col, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000909 self.tk.call(self._w, 'header', 'create', col, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000910
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000911 def header_configure(self, col, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000912 if cnf is None:
913 return _lst2dict(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000914 self.tk.split(
915 self.tk.call(self._w, 'header', 'configure', col)))
Raymond Hettingerff41c482003-04-06 09:01:11 +0000916 self.tk.call(self._w, 'header', 'configure', col,
917 *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000918
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000919 def header_cget(self, col, opt):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000920 return self.tk.call(self._w, 'header', 'cget', col, opt)
921
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000922 def header_exists(self, col):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000923 return self.tk.call(self._w, 'header', 'exists', col)
924
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000925 def header_delete(self, col):
Moshe Zadka22710822001-03-21 17:24:49 +0000926 self.tk.call(self._w, 'header', 'delete', col)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000927
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000928 def header_size(self, col):
Moshe Zadka22710822001-03-21 17:24:49 +0000929 return self.tk.call(self._w, 'header', 'size', col)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000930
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000931 def hide_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000932 self.tk.call(self._w, 'hide', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000933
934 def indicator_create(self, entry, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000935 self.tk.call(
936 self._w, 'indicator', 'create', entry, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000937
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000938 def indicator_configure(self, entry, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000939 if cnf is None:
940 return _lst2dict(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000941 self.tk.split(
942 self.tk.call(self._w, 'indicator', 'configure', entry)))
Raymond Hettingerff41c482003-04-06 09:01:11 +0000943 self.tk.call(
944 self._w, 'indicator', 'configure', entry, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000945
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000946 def indicator_cget(self, entry, opt):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000947 return self.tk.call(self._w, 'indicator', 'cget', entry, opt)
948
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000949 def indicator_exists(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000950 return self.tk.call (self._w, 'indicator', 'exists', entry)
951
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000952 def indicator_delete(self, entry):
Moshe Zadka22710822001-03-21 17:24:49 +0000953 self.tk.call(self._w, 'indicator', 'delete', entry)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000954
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000955 def indicator_size(self, entry):
Moshe Zadka22710822001-03-21 17:24:49 +0000956 return self.tk.call(self._w, 'indicator', 'size', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000957
958 def info_anchor(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000959 return self.tk.call(self._w, 'info', 'anchor')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000960
961 def info_children(self, entry=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000962 c = self.tk.call(self._w, 'info', 'children', entry)
963 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000964
965 def info_data(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000966 return self.tk.call(self._w, 'info', 'data', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000967
968 def info_exists(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000969 return self.tk.call(self._w, 'info', 'exists', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000970
971 def info_hidden(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000972 return self.tk.call(self._w, 'info', 'hidden', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000973
974 def info_next(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000975 return self.tk.call(self._w, 'info', 'next', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000976
977 def info_parent(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000978 return self.tk.call(self._w, 'info', 'parent', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000979
980 def info_prev(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000981 return self.tk.call(self._w, 'info', 'prev', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000982
983 def info_selection(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000984 c = self.tk.call(self._w, 'info', 'selection')
985 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000986
Martin v. Löwis3e048482001-10-09 11:50:55 +0000987 def item_cget(self, entry, col, opt):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000988 return self.tk.call(self._w, 'item', 'cget', entry, col, opt)
989
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000990 def item_configure(self, entry, col, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +0000991 if cnf is None:
992 return _lst2dict(
Neal Norwitzf539bde2002-11-14 02:43:40 +0000993 self.tk.split(
994 self.tk.call(self._w, 'item', 'configure', entry, col)))
Raymond Hettingerff41c482003-04-06 09:01:11 +0000995 self.tk.call(self._w, 'item', 'configure', entry, col,
996 *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +0000997
998 def item_create(self, entry, col, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +0000999 self.tk.call(
1000 self._w, 'item', 'create', entry, col, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001001
1002 def item_exists(self, entry, col):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001003 return self.tk.call(self._w, 'item', 'exists', entry, col)
1004
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001005 def item_delete(self, entry, col):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001006 self.tk.call(self._w, 'item', 'delete', entry, col)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001007
1008 def nearest(self, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001009 return self.tk.call(self._w, 'nearest', y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001010
1011 def see(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001012 self.tk.call(self._w, 'see', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001013
1014 def selection_clear(self, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001015 self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001016
1017 def selection_includes(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001018 return self.tk.call(self._w, 'selection', 'includes', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001019
1020 def selection_set(self, first, last=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001021 self.tk.call(self._w, 'selection', 'set', first, last)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001022
1023 def show_entry(self, entry):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001024 return self.tk.call(self._w, 'show', 'entry', entry)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001025
1026 def xview(self, *args):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001027 self.tk.call(self._w, 'xview', *args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001028
1029 def yview(self, *args):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001030 self.tk.call(self._w, 'yview', *args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001031
1032class InputOnly(TixWidget):
Martin v. Löwis46874282002-12-06 10:33:45 +00001033 """InputOnly - Invisible widget. Unix only.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001034
1035 Subwidgets - None"""
1036
1037 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001038 TixWidget.__init__(self, master, 'tixInputOnly', None, cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001039
1040class LabelEntry(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001041 """LabelEntry - Entry field with label. Packages an entry widget
1042 and a label into one mega widget. It can beused be used to simplify
1043 the creation of ``entry-form'' type of interface.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001044
Moshe Zadka22710822001-03-21 17:24:49 +00001045 Subwidgets Class
1046 ---------- -----
1047 label Label
1048 entry Entry"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001049
1050 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001051 TixWidget.__init__(self, master, 'tixLabelEntry',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001052 ['labelside','options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001053 self.subwidget_list['label'] = _dummyLabel(self, 'label')
1054 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001055
1056class LabelFrame(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001057 """LabelFrame - Labelled Frame container. Packages a frame widget
1058 and a label into one mega widget. To create widgets inside a
1059 LabelFrame widget, one creates the new widgets relative to the
1060 frame subwidget and manage them inside the frame subwidget.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001061
Moshe Zadka22710822001-03-21 17:24:49 +00001062 Subwidgets Class
1063 ---------- -----
1064 label Label
1065 frame Frame"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001066
1067 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001068 TixWidget.__init__(self, master, 'tixLabelFrame',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001069 ['labelside','options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001070 self.subwidget_list['label'] = _dummyLabel(self, 'label')
1071 self.subwidget_list['frame'] = _dummyFrame(self, 'frame')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001072
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001073
1074class ListNoteBook(TixWidget):
1075 """A ListNoteBook widget is very similar to the TixNoteBook widget:
1076 it can be used to display many windows in a limited space using a
1077 notebook metaphor. The notebook is divided into a stack of pages
1078 (windows). At one time only one of these pages can be shown.
1079 The user can navigate through these pages by
1080 choosing the name of the desired page in the hlist subwidget."""
1081
1082 def __init__(self, master, cnf={}, **kw):
Neal Norwitzf539bde2002-11-14 02:43:40 +00001083 TixWidget.__init__(self, master, 'tixListNoteBook', ['options'], cnf, kw)
1084 # Is this necessary? It's not an exposed subwidget in Tix.
1085 self.subwidget_list['pane'] = _dummyPanedWindow(self, 'pane',
1086 destroy_physically=0)
1087 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1088 self.subwidget_list['shlist'] = _dummyScrolledHList(self, 'shlist')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001089
1090 def add(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001091 self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001092 self.subwidget_list[name] = TixSubWidget(self, name)
1093 return self.subwidget_list[name]
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001094
Martin v. Löwis01824bf2002-09-19 08:12:55 +00001095 def page(self, name):
1096 return self.subwidget(name)
1097
1098 def pages(self):
1099 # Can't call subwidgets_all directly because we don't want .nbframe
1100 names = self.tk.split(self.tk.call(self._w, 'pages'))
1101 ret = []
1102 for x in names:
1103 ret.append(self.subwidget(x))
1104 return ret
1105
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001106 def raise_page(self, name): # raise is a python keyword
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001107 self.tk.call(self._w, 'raise', name)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001108
1109class Meter(TixWidget):
1110 """The Meter widget can be used to show the progress of a background
1111 job which may take a long time to execute.
1112 """
1113
1114 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001115 TixWidget.__init__(self, master, 'tixMeter',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001116 ['options'], cnf, kw)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001117
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001118class NoteBook(TixWidget):
1119 """NoteBook - Multi-page container widget (tabbed notebook metaphor).
1120
Moshe Zadka22710822001-03-21 17:24:49 +00001121 Subwidgets Class
1122 ---------- -----
1123 nbframe NoteBookFrame
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001124 <pages> page widgets added dynamically with the add method"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001125
1126 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001127 TixWidget.__init__(self,master,'tixNoteBook', ['options'], cnf, kw)
1128 self.subwidget_list['nbframe'] = TixSubWidget(self, 'nbframe',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001129 destroy_physically=0)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001130
1131 def add(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001132 self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001133 self.subwidget_list[name] = TixSubWidget(self, name)
1134 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001135
1136 def delete(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001137 self.tk.call(self._w, 'delete', name)
1138 self.subwidget_list[name].destroy()
1139 del self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001140
1141 def page(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001142 return self.subwidget(name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001143
1144 def pages(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001145 # Can't call subwidgets_all directly because we don't want .nbframe
1146 names = self.tk.split(self.tk.call(self._w, 'pages'))
1147 ret = []
1148 for x in names:
1149 ret.append(self.subwidget(x))
1150 return ret
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001151
Moshe Zadka22710822001-03-21 17:24:49 +00001152 def raise_page(self, name): # raise is a python keyword
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001153 self.tk.call(self._w, 'raise', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001154
1155 def raised(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001156 return self.tk.call(self._w, 'raised')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001157
1158class NoteBookFrame(TixWidget):
Martin v. Löwis46874282002-12-06 10:33:45 +00001159 # FIXME: This is dangerous to expose to be called on its own.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001160 pass
1161
1162class OptionMenu(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001163 """OptionMenu - creates a menu button of options.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001164
Moshe Zadka22710822001-03-21 17:24:49 +00001165 Subwidget Class
1166 --------- -----
Neal Norwitzf539bde2002-11-14 02:43:40 +00001167 menubutton Menubutton
1168 menu Menu"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001169
1170 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001171 TixWidget.__init__(self, master, 'tixOptionMenu', ['options'], cnf, kw)
1172 self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
1173 self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001174
1175 def add_command(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001176 self.tk.call(self._w, 'add', 'command', name, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001177
1178 def add_separator(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001179 self.tk.call(self._w, 'add', 'separator', name, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001180
1181 def delete(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001182 self.tk.call(self._w, 'delete', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001183
1184 def disable(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001185 self.tk.call(self._w, 'disable', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001186
1187 def enable(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001188 self.tk.call(self._w, 'enable', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001189
1190class PanedWindow(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001191 """PanedWindow - Multi-pane container widget
1192 allows the user to interactively manipulate the sizes of several
1193 panes. The panes can be arranged either vertically or horizontally.The
1194 user changes the sizes of the panes by dragging the resize handle
1195 between two panes.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001196
Moshe Zadka22710822001-03-21 17:24:49 +00001197 Subwidgets Class
1198 ---------- -----
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001199 <panes> g/p widgets added dynamically with the add method."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001200
1201 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001202 TixWidget.__init__(self, master, 'tixPanedWindow', ['orientation', 'options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001203
Neal Norwitzf539bde2002-11-14 02:43:40 +00001204 # add delete forget panecget paneconfigure panes setsize
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001205 def add(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001206 self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001207 self.subwidget_list[name] = TixSubWidget(self, name,
Neal Norwitzf539bde2002-11-14 02:43:40 +00001208 check_intermediate=0)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001209 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001210
Neal Norwitzf539bde2002-11-14 02:43:40 +00001211 def delete(self, name):
1212 self.tk.call(self._w, 'delete', name)
1213 self.subwidget_list[name].destroy()
1214 del self.subwidget_list[name]
1215
1216 def forget(self, name):
1217 self.tk.call(self._w, 'forget', name)
1218
1219 def panecget(self, entry, opt):
1220 return self.tk.call(self._w, 'panecget', entry, opt)
1221
1222 def paneconfigure(self, entry, cnf={}, **kw):
1223 if cnf is None:
1224 return _lst2dict(
1225 self.tk.split(
1226 self.tk.call(self._w, 'paneconfigure', entry)))
Raymond Hettingerff41c482003-04-06 09:01:11 +00001227 self.tk.call(self._w, 'paneconfigure', entry, *self._options(cnf, kw))
Neal Norwitzf539bde2002-11-14 02:43:40 +00001228
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001229 def panes(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001230 names = self.tk.call(self._w, 'panes')
1231 ret = []
1232 for x in names:
1233 ret.append(self.subwidget(x))
1234 return ret
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001235
1236class PopupMenu(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001237 """PopupMenu widget can be used as a replacement of the tk_popup command.
1238 The advantage of the Tix PopupMenu widget is it requires less application
1239 code to manipulate.
1240
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001241
Moshe Zadka22710822001-03-21 17:24:49 +00001242 Subwidgets Class
1243 ---------- -----
1244 menubutton Menubutton
1245 menu Menu"""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001246
Martin v. Löwis46874282002-12-06 10:33:45 +00001247 # FIXME: It should inherit -superclass tixShell
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001248 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001249 TixWidget.__init__(self, master, 'tixPopupMenu', ['options'], cnf, kw)
1250 self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton')
1251 self.subwidget_list['menu'] = _dummyMenu(self, 'menu')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001252
1253 def bind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001254 self.tk.call(self._w, 'bind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001255
1256 def unbind_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001257 self.tk.call(self._w, 'unbind', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001258
1259 def post_widget(self, widget, x, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001260 self.tk.call(self._w, 'post', widget._w, x, y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001261
1262class ResizeHandle(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001263 """Internal widget to draw resize handles on Scrolled widgets."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001264 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001265 # There seems to be a Tix bug rejecting the configure method
1266 # Let's try making the flags -static
1267 flags = ['options', 'command', 'cursorfg', 'cursorbg',
1268 'handlesize', 'hintcolor', 'hintwidth',
1269 'x', 'y']
1270 # In fact, x y height width are configurable
1271 TixWidget.__init__(self, master, 'tixResizeHandle',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001272 flags, cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001273
1274 def attach_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001275 self.tk.call(self._w, 'attachwidget', widget._w)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001276
Martin v. Löwis652e1912001-11-25 14:50:56 +00001277 def detach_widget(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001278 self.tk.call(self._w, 'detachwidget', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001279
1280 def hide(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001281 self.tk.call(self._w, 'hide', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001282
1283 def show(self, widget):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001284 self.tk.call(self._w, 'show', widget._w)
Martin v. Löwis652e1912001-11-25 14:50:56 +00001285
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001286class ScrolledHList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001287 """ScrolledHList - HList with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001288
Martin v. Löwis46874282002-12-06 10:33:45 +00001289 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001290 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001291 TixWidget.__init__(self, master, 'tixScrolledHList', ['options'],
Neal Norwitzf539bde2002-11-14 02:43:40 +00001292 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001293 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1294 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1295 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001296
1297class ScrolledListBox(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001298 """ScrolledListBox - Listbox 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, 'tixScrolledListBox', ['options'], cnf, kw)
1303 self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
1304 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1305 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001306
1307class ScrolledText(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001308 """ScrolledText - Text with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001309
Martin v. Löwis46874282002-12-06 10:33:45 +00001310 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001311 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001312 TixWidget.__init__(self, master, 'tixScrolledText', ['options'], cnf, kw)
1313 self.subwidget_list['text'] = _dummyText(self, 'text')
1314 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1315 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001316
1317class ScrolledTList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001318 """ScrolledTList - TList with automatic scrollbars."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001319
Martin v. Löwis46874282002-12-06 10:33:45 +00001320 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001321 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001322 TixWidget.__init__(self, master, 'tixScrolledTList', ['options'],
Neal Norwitzf539bde2002-11-14 02:43:40 +00001323 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001324 self.subwidget_list['tlist'] = _dummyTList(self, 'tlist')
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 ScrolledWindow(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001329 """ScrolledWindow - Window 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, 'tixScrolledWindow', ['options'], cnf, kw)
1334 self.subwidget_list['window'] = _dummyFrame(self, 'window')
1335 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1336 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001337
1338class Select(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001339 """Select - Container of button subwidgets. It can be used to provide
1340 radio-box or check-box style of selection options for the user.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001341
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001342 Subwidgets are buttons added dynamically using the add method."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001343
Martin v. Löwis46874282002-12-06 10:33:45 +00001344 # FIXME: It should inherit -superclass tixLabelWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001345 def __init__(self, master, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001346 TixWidget.__init__(self, master, 'tixSelect',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001347 ['allowzero', 'radio', 'orientation', 'labelside',
1348 'options'],
1349 cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001350 self.subwidget_list['label'] = _dummyLabel(self, 'label')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001351
1352 def add(self, name, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001353 self.tk.call(self._w, 'add', name, *self._options(cnf, kw))
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001354 self.subwidget_list[name] = _dummyButton(self, name)
1355 return self.subwidget_list[name]
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001356
1357 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001358 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001359
Neal Norwitzf539bde2002-11-14 02:43:40 +00001360class Shell(TixWidget):
1361 """Toplevel window.
1362
1363 Subwidgets - None"""
1364
1365 def __init__ (self,master=None,cnf={}, **kw):
1366 TixWidget.__init__(self, master, 'tixShell', ['options', 'title'], cnf, kw)
1367
1368class DialogShell(TixWidget):
1369 """Toplevel window, with popup popdown and center methods.
1370 It tells the window manager that it is a dialog window and should be
1371 treated specially. The exact treatment depends on the treatment of
1372 the window manager.
1373
1374 Subwidgets - None"""
1375
Martin v. Löwis46874282002-12-06 10:33:45 +00001376 # FIXME: It should inherit from Shell
Neal Norwitzf539bde2002-11-14 02:43:40 +00001377 def __init__ (self,master=None,cnf={}, **kw):
1378 TixWidget.__init__(self, master,
1379 'tixDialogShell',
1380 ['options', 'title', 'mapped',
1381 'minheight', 'minwidth',
1382 'parent', 'transient'], cnf, kw)
1383
1384 def popdown(self):
1385 self.tk.call(self._w, 'popdown')
1386
1387 def popup(self):
1388 self.tk.call(self._w, 'popup')
1389
1390 def center(self):
1391 self.tk.call(self._w, 'center')
1392
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001393class StdButtonBox(TixWidget):
1394 """StdButtonBox - Standard Button Box (OK, Apply, Cancel and Help) """
1395
1396 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001397 TixWidget.__init__(self, master, 'tixStdButtonBox',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001398 ['orientation', 'options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001399 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1400 self.subwidget_list['apply'] = _dummyButton(self, 'apply')
1401 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1402 self.subwidget_list['help'] = _dummyButton(self, 'help')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001403
1404 def invoke(self, name):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001405 if self.subwidget_list.has_key(name):
1406 self.tk.call(self._w, 'invoke', name)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001407
1408class TList(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001409 """TList - Hierarchy display widget which can be
1410 used to display data in a tabular format. The list entries of a TList
1411 widget are similar to the entries in the Tk listbox widget. The main
1412 differences are (1) the TList widget can display the list entries in a
1413 two dimensional format and (2) you can use graphical images as well as
1414 multiple colors and fonts for the list entries.
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001415
1416 Subwidgets - None"""
1417
1418 def __init__ (self,master=None,cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001419 TixWidget.__init__(self, master, 'tixTList', ['options'], cnf, kw)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001420
1421 def active_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001422 self.tk.call(self._w, 'active', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001423
1424 def active_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001425 self.tk.call(self._w, 'active', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001426
1427 def anchor_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001428 self.tk.call(self._w, 'anchor', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001429
1430 def anchor_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001431 self.tk.call(self._w, 'anchor', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001432
1433 def delete(self, from_, to=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001434 self.tk.call(self._w, 'delete', from_, to)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001435
1436 def dragsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001437 self.tk.call(self._w, 'dragsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001438
1439 def dragsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001440 self.tk.call(self._w, 'dragsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001441
1442 def dropsite_set(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001443 self.tk.call(self._w, 'dropsite', 'set', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001444
1445 def dropsite_clear(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001446 self.tk.call(self._w, 'dropsite', 'clear')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001447
1448 def insert(self, index, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001449 self.tk.call(self._w, 'insert', index, *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001450
1451 def info_active(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001452 return self.tk.call(self._w, 'info', 'active')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001453
1454 def info_anchor(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001455 return self.tk.call(self._w, 'info', 'anchor')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001456
1457 def info_down(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001458 return self.tk.call(self._w, 'info', 'down', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001459
1460 def info_left(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001461 return self.tk.call(self._w, 'info', 'left', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001462
1463 def info_right(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001464 return self.tk.call(self._w, 'info', 'right', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001465
1466 def info_selection(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001467 c = self.tk.call(self._w, 'info', 'selection')
1468 return self.tk.splitlist(c)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001469
1470 def info_size(self):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001471 return self.tk.call(self._w, 'info', 'size')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001472
1473 def info_up(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001474 return self.tk.call(self._w, 'info', 'up', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001475
1476 def nearest(self, x, y):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001477 return self.tk.call(self._w, 'nearest', x, y)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001478
1479 def see(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001480 self.tk.call(self._w, 'see', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001481
1482 def selection_clear(self, cnf={}, **kw):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001483 self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw))
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001484
1485 def selection_includes(self, index):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001486 return self.tk.call(self._w, 'selection', 'includes', index)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001487
1488 def selection_set(self, first, last=None):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001489 self.tk.call(self._w, 'selection', 'set', first, last)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001490
1491 def xview(self, *args):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001492 self.tk.call(self._w, 'xview', *args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001493
1494 def yview(self, *args):
Raymond Hettingerff41c482003-04-06 09:01:11 +00001495 self.tk.call(self._w, 'yview', *args)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001496
1497class Tree(TixWidget):
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001498 """Tree - The tixTree widget can be used to display hierachical
1499 data in a tree form. The user can adjust
1500 the view of the tree by opening or closing parts of the tree."""
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001501
Martin v. Löwis46874282002-12-06 10:33:45 +00001502 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001503 def __init__(self, master=None, cnf={}, **kw):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001504 TixWidget.__init__(self, master, 'tixTree',
Neal Norwitzf539bde2002-11-14 02:43:40 +00001505 ['options'], cnf, kw)
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001506 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1507 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1508 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001509
1510 def autosetmode(self):
Martin v. Löwis46874282002-12-06 10:33:45 +00001511 '''This command calls the setmode method for all the entries in this
1512 Tree widget: if an entry has no child entries, its mode is set to
1513 none. Otherwise, if the entry has any hidden child entries, its mode is
1514 set to open; otherwise its mode is set to close.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001515 self.tk.call(self._w, 'autosetmode')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001516
1517 def close(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001518 '''Close the entry given by entryPath if its mode is close.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001519 self.tk.call(self._w, 'close', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001520
1521 def getmode(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001522 '''Returns the current mode of the entry given by entryPath.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001523 return self.tk.call(self._w, 'getmode', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001524
1525 def open(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001526 '''Open the entry given by entryPath if its mode is open.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001527 self.tk.call(self._w, 'open', entrypath)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001528
1529 def setmode(self, entrypath, mode='none'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001530 '''This command is used to indicate whether the entry given by
1531 entryPath has children entries and whether the children are visible. mode
1532 must be one of open, close or none. If mode is set to open, a (+)
1533 indicator is drawn next the the entry. If mode is set to close, a (-)
1534 indicator is drawn next the the entry. If mode is set to none, no
1535 indicators will be drawn for this entry. The default mode is none. The
1536 open mode indicates the entry has hidden children and this entry can be
1537 opened by the user. The close mode indicates that all the children of the
1538 entry are now visible and the entry can be closed by the user.'''
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001539 self.tk.call(self._w, 'setmode', entrypath, mode)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001540
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001541
1542# Could try subclassing Tree for CheckList - would need another arg to init
1543class CheckList(TixWidget):
1544 """The CheckList widget
1545 displays a list of items to be selected by the user. CheckList acts
1546 similarly to the Tk checkbutton or radiobutton widgets, except it is
1547 capable of handling many more items than checkbuttons or radiobuttons.
1548 """
Martin v. Löwis46874282002-12-06 10:33:45 +00001549 # FIXME: It should inherit -superclass tixTree
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001550 def __init__(self, master=None, cnf={}, **kw):
1551 TixWidget.__init__(self, master, 'tixCheckList',
1552 ['options'], cnf, kw)
1553 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1554 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1555 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001556
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001557 def autosetmode(self):
Martin v. Löwis46874282002-12-06 10:33:45 +00001558 '''This command calls the setmode method for all the entries in this
1559 Tree widget: if an entry has no child entries, its mode is set to
1560 none. Otherwise, if the entry has any hidden child entries, its mode is
1561 set to open; otherwise its mode is set to close.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001562 self.tk.call(self._w, 'autosetmode')
1563
1564 def close(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001565 '''Close the entry given by entryPath if its mode is close.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001566 self.tk.call(self._w, 'close', entrypath)
1567
1568 def getmode(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001569 '''Returns the current mode of the entry given by entryPath.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001570 return self.tk.call(self._w, 'getmode', entrypath)
1571
1572 def open(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001573 '''Open the entry given by entryPath if its mode is open.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001574 self.tk.call(self._w, 'open', entrypath)
1575
1576 def getselection(self, mode='on'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001577 '''Returns a list of items whose status matches status. If status is
1578 not specified, the list of items in the "on" status will be returned.
1579 Mode can be on, off, default'''
1580 c = self.tk.split(self.tk.call(self._w, 'getselection', mode))
1581 return self.tk.splitlist(c)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001582
1583 def getstatus(self, entrypath):
Martin v. Löwis46874282002-12-06 10:33:45 +00001584 '''Returns the current status of entryPath.'''
1585 return self.tk.call(self._w, 'getstatus', entrypath)
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001586
1587 def setstatus(self, entrypath, mode='on'):
Martin v. Löwis46874282002-12-06 10:33:45 +00001588 '''Sets the status of entryPath to be status. A bitmap will be
1589 displayed next to the entry its status is on, off or default.'''
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001590 self.tk.call(self._w, 'setstatus', entrypath, mode)
1591
1592
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001593###########################################################################
1594### The subclassing below is used to instantiate the subwidgets in each ###
1595### mega widget. This allows us to access their methods directly. ###
1596###########################################################################
1597
1598class _dummyButton(Button, TixSubWidget):
1599 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001600 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001601
1602class _dummyCheckbutton(Checkbutton, TixSubWidget):
1603 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001604 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001605
1606class _dummyEntry(Entry, TixSubWidget):
1607 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001608 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001609
1610class _dummyFrame(Frame, TixSubWidget):
1611 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001612 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001613
1614class _dummyLabel(Label, TixSubWidget):
1615 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001616 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001617
1618class _dummyListbox(Listbox, TixSubWidget):
1619 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001620 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001621
1622class _dummyMenu(Menu, TixSubWidget):
1623 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001624 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001625
1626class _dummyMenubutton(Menubutton, TixSubWidget):
1627 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001628 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001629
1630class _dummyScrollbar(Scrollbar, TixSubWidget):
1631 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001632 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001633
1634class _dummyText(Text, TixSubWidget):
1635 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001636 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001637
1638class _dummyScrolledListBox(ScrolledListBox, TixSubWidget):
1639 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001640 TixSubWidget.__init__(self, master, name, destroy_physically)
1641 self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox')
1642 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1643 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001644
1645class _dummyHList(HList, TixSubWidget):
1646 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001647 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001648
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001649class _dummyScrolledHList(ScrolledHList, TixSubWidget):
1650 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001651 TixSubWidget.__init__(self, master, name, destroy_physically)
1652 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1653 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1654 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001655
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001656class _dummyTList(TList, TixSubWidget):
1657 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001658 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001659
1660class _dummyComboBox(ComboBox, TixSubWidget):
1661 def __init__(self, master, name, destroy_physically=1):
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001662 TixSubWidget.__init__(self, master, name, ['fancy',destroy_physically])
1663 self.subwidget_list['label'] = _dummyLabel(self, 'label')
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001664 self.subwidget_list['entry'] = _dummyEntry(self, 'entry')
1665 self.subwidget_list['arrow'] = _dummyButton(self, 'arrow')
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001666
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001667 self.subwidget_list['slistbox'] = _dummyScrolledListBox(self,
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001668 'slistbox')
1669 try:
1670 self.subwidget_list['tick'] = _dummyButton(self, 'tick')
1671 #cross Button : present if created with the fancy option
1672 self.subwidget_list['cross'] = _dummyButton(self, 'cross')
1673 except TypeError:
1674 # unavailable when -fancy not specified
1675 pass
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001676
1677class _dummyDirList(DirList, TixSubWidget):
1678 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001679 TixSubWidget.__init__(self, master, name, destroy_physically)
1680 self.subwidget_list['hlist'] = _dummyHList(self, 'hlist')
1681 self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb')
1682 self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001683
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001684class _dummyDirSelectBox(DirSelectBox, TixSubWidget):
1685 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001686 TixSubWidget.__init__(self, master, name, destroy_physically)
1687 self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist')
1688 self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001689
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001690class _dummyExFileSelectBox(ExFileSelectBox, TixSubWidget):
1691 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001692 TixSubWidget.__init__(self, master, name, destroy_physically)
1693 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1694 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1695 self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden')
1696 self.subwidget_list['types'] = _dummyComboBox(self, 'types')
1697 self.subwidget_list['dir'] = _dummyComboBox(self, 'dir')
1698 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
1699 self.subwidget_list['file'] = _dummyComboBox(self, 'file')
1700 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001701
1702class _dummyFileSelectBox(FileSelectBox, TixSubWidget):
1703 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001704 TixSubWidget.__init__(self, master, name, destroy_physically)
1705 self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist')
1706 self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist')
1707 self.subwidget_list['filter'] = _dummyComboBox(self, 'filter')
1708 self.subwidget_list['selection'] = _dummyComboBox(self, 'selection')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001709
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001710class _dummyFileComboBox(ComboBox, TixSubWidget):
1711 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001712 TixSubWidget.__init__(self, master, name, destroy_physically)
1713 self.subwidget_list['dircbx'] = _dummyComboBox(self, 'dircbx')
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001714
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001715class _dummyStdButtonBox(StdButtonBox, TixSubWidget):
1716 def __init__(self, master, name, destroy_physically=1):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001717 TixSubWidget.__init__(self, master, name, destroy_physically)
1718 self.subwidget_list['ok'] = _dummyButton(self, 'ok')
1719 self.subwidget_list['apply'] = _dummyButton(self, 'apply')
1720 self.subwidget_list['cancel'] = _dummyButton(self, 'cancel')
1721 self.subwidget_list['help'] = _dummyButton(self, 'help')
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001722
1723class _dummyNoteBookFrame(NoteBookFrame, TixSubWidget):
1724 def __init__(self, master, name, destroy_physically=0):
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001725 TixSubWidget.__init__(self, master, name, destroy_physically)
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001726
Martin v. Löwis01824bf2002-09-19 08:12:55 +00001727class _dummyPanedWindow(PanedWindow, TixSubWidget):
1728 def __init__(self, master, name, destroy_physically=1):
1729 TixSubWidget.__init__(self, master, name, destroy_physically)
1730
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001731########################
1732### Utility Routines ###
1733########################
1734
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001735#mike Should tixDestroy be exposed as a wrapper? - but not for widgets.
1736
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001737def OptionName(widget):
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001738 '''Returns the qualified path name for the widget. Normally used to set
1739 default options for subwidgets. See tixwidgets.py'''
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001740 return widget.tk.call('tixOptionName', widget._w)
1741
1742# Called with a dictionary argument of the form
1743# {'*.c':'C source files', '*.txt':'Text Files', '*':'All files'}
1744# returns a string which can be used to configure the fsbox file types
1745# in an ExFileSelectBox. i.e.,
1746# '{{*} {* - All files}} {{*.c} {*.c - C source files}} {{*.txt} {*.txt - Text Files}}'
1747def FileTypeList(dict):
1748 s = ''
1749 for type in dict.keys():
Martin v. Löwis0c0d56a2002-03-28 16:26:40 +00001750 s = s + '{{' + type + '} {' + type + ' - ' + dict[type] + '}} '
Martin v. Löwisb21cb5f2001-03-21 07:42:07 +00001751 return s
1752
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001753# Still to be done:
Martin v. Löwis46874282002-12-06 10:33:45 +00001754# tixIconView
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001755class CObjView(TixWidget):
1756 """This file implements the Canvas Object View widget. This is a base
1757 class of IconView. It implements automatic placement/adjustment of the
1758 scrollbars according to the canvas objects inside the canvas subwidget.
1759 The scrollbars are adjusted so that the canvas is just large enough
1760 to see all the objects.
1761 """
Martin v. Löwis46874282002-12-06 10:33:45 +00001762 # FIXME: It should inherit -superclass tixScrolledWidget
1763 pass
1764
Neal Norwitzd8b5e3f2002-12-30 23:52:01 +00001765class Grid(TixWidget):
1766 '''The Tix Grid command creates a new window and makes it into a
1767 tixGrid widget. Additional options, may be specified on the command
1768 line or in the option database to configure aspects such as its cursor
1769 and relief.
1770
1771 A Grid widget displays its contents in a two dimensional grid of cells.
1772 Each cell may contain one Tix display item, which may be in text,
1773 graphics or other formats. See the DisplayStyle class for more information
1774 about Tix display items. Individual cells, or groups of cells, can be
1775 formatted with a wide range of attributes, such as its color, relief and
1776 border.
1777
1778 Subwidgets - None'''
1779 pass
1780
1781 # def anchor option ?args ...?
1782 # def bdtype
1783 # def delete dim from ?to?
1784 # def edit apply
1785 # def edit set x y
1786 # def entrycget x y option
1787 # def entryconfigure x y ?option? ?value option value ...?
1788 # def format
1789 # def index
1790 # def move dim from to offset
1791 # def set x y ?-itemtype type? ?option value...?
1792 # def size dim index ?option value ...?
1793 # def unset x y
1794 # def xview
1795 # def yview
Raymond Hettingerff41c482003-04-06 09:01:11 +00001796
Martin v. Löwis46874282002-12-06 10:33:45 +00001797class ScrolledGrid(TixWidget):
1798 '''Scrolled Grid widgets'''
1799
1800 # FIXME: It should inherit -superclass tixScrolledWidget
Martin v. Löwisb7b32602001-11-02 23:48:20 +00001801 pass