Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v9 / lib / python2.4 / site-packages / Pmw / Pmw_1_2 / doc / changes.html
CommitLineData
920dae64
AT
1
2 <html>
3 <head>
4 <meta name="description" content="Pmw - a toolkit for building high-level compound widgets in Python">
5 <meta name="content" content="python, megawidget, mega widget, compound widget, gui, tkinter">
6 <title>Changes to Pmw</title>
7 </head>
8
9 <body bgcolor="#ffffff" text="#000000" link="#0000ee"
10 vlink="551a8b" alink="ff0000">
11
12 <h1 ALIGN="CENTER">Changes to Pmw</h1>
13
14<p>
15 6 January 1997</p>
16
17<ul><li><p>Release of version 0.1</p>
18
19</li></ul>
20<p> 14 February 1997</p>
21
22<ul><li><p>Fixed bug in Counter demo for the Macintosh - the maximum size of an
23 integer is smaller than the value returned by time.time().</p>
24
25</li>
26<li><p>Fixed bug in Grid demo for Tk 4.2 - grid_bbox returns garbage if it is
27 called without update_idletasks. Also, grid_bbox can only have two
28 arguments in Tk 4.1.</p>
29
30</li>
31<li><p>Modified ScrolledText demo so that the text widget contains enough text
32 to require a vertical scrollbar.</p>
33
34</li>
35<li><p>Changes to PmwBase:</p>
36<ul><li><p>Prefixed the name of several private variables with a double underscore.</p>
37
38</li>
39<li><p>Added symbolic constants for the indexes into an optionInfo list.</p>
40
41</li>
42<li><p>Changed names of several methods and variables to be more descriptive.</p>
43
44</li>
45<li><p>Removed options() method.</p>
46
47</li>
48<li><p>Simplified configuration option data structures. Modified option
49 handling code so that default options are set correctly. If an
50 option is created before initialise() is called then initialise()
51 checks if the option is set by the keyword arguments to
52 initialise(). If not, then it is given the value found in the
53 Tk option database, if a value exists, or the default value. If an
54 option is created after initialise() is called, then it is given the
55 value found in the Tk option database, if a value exists, or the
56 default value.</p>
57
58</li></ul>
59
60</li>
61<li><p>Replaced usage of self._hull in megawidgets by interior() method.</p>
62
63</li>
64<li><p>Added autoclear option to ComboBox.</p>
65
66</li>
67<li><p>Fixed bug in ComboBox - fast clicking on the arrow button could result
68 in an attempt to grab a window that was not yet visible.</p>
69
70</li>
71<li><p>Added "sys.exc_traceback = None" to the except clauses of all try
72 statements so that references to objects in the stack trace would not
73 be left.</p>
74
75</li>
76<li><p>Added takefocus option to PushButton.</p>
77
78</li>
79<li><p>Modified the getcurselection() method of ScrolledListBox so that it
80 returns a string if the selection mode is <strong>'single'</strong> or <strong>'browse'</strong>, rather
81 than a tuple with one element. This also affects methods forwarded and
82 derived from ScrolledListBox.</p>
83
84</li>
85<li><p>Modified ScrolledListBox so that it avoids unnecessary updates by
86 using idle timer.</p>
87
88</li>
89<li><p>Modified ScrolledText to use grid instead of pack.</p>
90
91</li>
92<li><p>Added shutdown() function to Tk module to clean up all references to
93 the Tcl interpreter and then delete it.</p>
94
95</li>
96<li><p>Fixed bug in Tk module for the Macintosh - update() was being called in
97 initialise() before the Tcl interpreter was created.</p>
98
99</li></ul>
100<p> 14 February 1997</p>
101
102<ul><li><p>Version 0.1.1 completed and released internally.</p>
103
104</li></ul>
105<p> 6 March 1997</p>
106
107<ul><li><p>Pmw now uses the standard Tkinter module. The Tk module has been
108 dropped. This means that the Tk module functions such as after,
109 bell, bind, update, etc, are no longer available and the equivalent
110 Tkinter methods should be used.</p>
111
112</li>
113<li><p>To restore some of the features of the Tk module, Pmw.initialise()
114 now adds run-time hooks into Tkinter to get notification of when Tk
115 widgets are created and destroyed. It also modifies the CallWrapper
116 class so that errors during callbacks and bindings can be displayed
117 in a window. If Pmw.initialise() is not called, Tkinter is not
118 modified and these features are not available.</p>
119
120</li>
121<li><p>If a Tk widget which is acting as the hull of a megawidget is
122 destroyed, then the megawidget is destroyed as well. This can
123 only happen if Pmw.initialise() is called.</p>
124
125</li>
126<li><p>Pmw.initialise() now takes the Tkinter root as its argument.</p>
127
128</li>
129<li><p>The parent of megawidgets now defaults to the Tk root. Previously,
130 the parent of non-toplevel megawidgets had to be given.</p>
131
132</li>
133<li><p>Added PmwBase.tracetk() function to get trace of calls to the Tcl
134 interpreter for debugging.</p>
135
136</li>
137<li><p>Added functions to PmwBase to display a busy cursor over the
138 application such as when a modal dialog is displayed or it is
139 blocked doing a long calculation. Uses busy command of the blt
140 extension, if present.</p>
141
142</li>
143<li><p>Created a nifty new demo which demonstrates most of the megawidgets
144 in a convenient way.</p>
145
146</li>
147<li><p>Added a TextDialog.</p>
148
149</li>
150<li><p>Added functionality to handle the grabbing of nested modal dialogs
151 correctly.</p>
152
153</li>
154<li><p>Added an activatecommand option to Dialog which allows, for example,
155 the PromptDialog widget to set the keyboard focus when it is
156 activated.</p>
157
158</li>
159<li><p>Added tests for Counter and logicalfont.</p>
160
161</li>
162<li><p>The ScrolledListBox selectioncommand is no longer given the widget
163 as its first argument.</p>
164
165</li>
166<li><p>Several method, function and component names were changed, to be
167 consistent with the coding conventions.</p>
168
169</li>
170<li><p>Some of the effects of moving from the Tk module to Tkinter are:</p>
171<ul><li><p>The Tk module used to exit if there were no non-root toplevel
172 windows shown. This is no longer the case and so the application
173 must handle this explicitly, particularly if the root window is
174 withdrawn and the last non-root toplevel is deleted by the window
175 manager.</p>
176
177</li>
178<li><p>The Tk module bind functions and methods used to take a noEvent
179 argument to indicate that the Tk event should not be passed to the
180 callback. Tkinter does not support this.</p>
181
182</li>
183<li><p>The Tk module initialise() function should be replaced by
184 "root = Tkinter.Tk()" and root should be used instead of "Tk.Root()"</p>
185
186</li>
187<li><p>The Tk module quit() function should be replace by "root.destroy()".</p>
188
189</li>
190<li><p>Toplevels are not hidden when created. To be consistent,
191 MegaToplevels are not hidden either.</p>
192
193</li>
194<li><p>The hide and show methods are not available for Tkinter Toplevels,
195 only MegaToplevels</p>
196
197</li>
198<li><p>There is no grid_configure method.</p>
199
200</li>
201<li><p>Tkinter.Canvas.coords() returns a python list, not a tuple.</p>
202
203</li>
204<li><p>The Tkinter cget and configure widget methods always return
205 strings for the option values. The Tk module used to convert the
206 string to the appropriate python type (such as string, integer,
207 float, Variable, Image, callback function).</p>
208
209</li>
210<li><p>Tkinter Menu and Toplevel classes incorrectly have a pack method.</p>
211
212</li>
213<li><p>Menu class has no geometry method.</p>
214
215</li>
216<li><p>Canvas focus returns <strong>''</strong> rather than None.</p>
217
218</li>
219<li><p>Text mark_gravity returns <strong>''</strong> rather than None.</p>
220
221</li></ul>
222
223</li></ul>
224<p> 13 March 1997</p>
225
226<ul><li><p>Release of version 0.2</p>
227
228</li></ul>
229<p> 17 March 1997</p>
230
231<ul><li><p>Set default WM_DELETE_WINDOW protocol of Tkinter.Toplevel to
232 destroy() and removed duplicated protocol request from all demos.</p>
233
234</li>
235<li><p>Modified text of ShowBusy demo to indicate that busy cursor will
236 only be seen if the BLT extension is present.</p>
237
238</li>
239<li><p>Replaced call to update() in PmwLabeledWidget.py with update_idletasks().</p>
240
241</li>
242<li><p>Changed name of PromptDialog component from <strong>'entry'</strong> to <strong>'entryfield'</strong>.</p>
243
244</li></ul>
245<p> 28 April 1997</p>
246
247<ul><li><p>Version 0.3 released internally</p>
248
249</li></ul>
250<p> 19 August 1997</p>
251
252<ul><li><p>Many changes made (see the version 0.4 porting guide for
253 more details).</p>
254
255</li>
256<li><p>The option propagation mechanism that iwidgets uses is too
257 cumbersome, too hard to understand and, in python, too slow.
258 Developed a new mechanism which is more explicit in naming
259 options. This resulted in most options which were simply
260 propagated to components being removed. Removed keep(), rename()
261 and ignore() methods and "usual" options.</p>
262
263</li>
264<li><p>For speed, Pmw no longer queries the Tk option database for
265 default values for megawidget options. Hence, resource names and
266 classes do not need to be supplied when creating options and
267 <strong>None</strong> is returned for the resource name and class when using
268 <code>configure()</code> to query the options. Option "types" no longer
269 used.</p>
270
271</li>
272<li><p>Changed method and component names to be more consistent.</p>
273
274</li>
275<li><p>Replaced most uses of pack() with grid().</p>
276
277</li>
278<li><p>Megawidgets no longer inherit from LabeledWidget. Instead they
279 call createlabel() to optionally create the label component.</p>
280
281</li>
282<li><p>Removed child site from EntryField and rewrote ComboBox
283 accordingly.</p>
284
285</li>
286<li><p>Wrote lots more documentation, including automatically generated
287 reference manuals.</p>
288
289</li>
290<li><p>Removed PushButton and rewrote ButtonBox to directly create
291 Tkinter.Buttons rather than PushButtons.</p>
292
293</li>
294<li><p>Added initialisation options - options which can be set at
295 creation time but not later using configure().</p>
296
297</li>
298<li><p>Added aliases for components.</p>
299
300</li>
301<li><p>Modified the base classes so that during option configuration,
302 components are configured <em>before</em> configuration called functions
303 are called.</p>
304
305</li>
306<li><p>Added several more megawidgets.</p>
307
308</li>
309<li><p>Added interface to BLT graph and vector commands.</p>
310
311</li>
312<li><p>Created PmwLazy module for lazy importing of Pmw - avoids loading
313 megawidgets which are not used.</p>
314
315</li>
316<li><p>Added several more functions for handling color and fonts.</p>
317
318</li>
319<li><p>Replaced Counter and EntryField <em>time</em> with <em>timeN</em> and <em>time24</em></p>
320
321</li>
322<li><p>Pmw.initialise() will now create Tkinter.Tk if not given root.</p>
323
324</li></ul>
325<p> 1 September 1997</p>
326
327<ul><li><p>Release of version 0.4</p>
328
329</li></ul>
330<p> 5 September 1997</p>
331
332<ul><li><p>Modified the base classes so that the Tk option database resource
333 class of megawidgets can be overridden in the call to the
334 constructor using the <strong>hull_class</strong> option.</p>
335
336</li>
337<li><p>The separators in Pmw.PanedWidget are now active - they can be
338 grabbed, like the handles, and moved around. The cursor now
339 changes to the correct left/right or up/down cursor when over a
340 separator or handle. (Clemens Hintze)</p>
341
342</li>
343<li><p>Fixed bug in MessageInfo demo Dismiss button. If it is invoked,
344 an error occurs saying "not enough arguments". (Mark Colclough)</p>
345
346</li></ul>
347<p> 9 September 1997</p>
348
349<ul><li><p>Added the <strong>useTkOptionDb</strong> argument to Pmw.initialise which
350 specifies that the initial values of megawidget options are to be
351 set by querying the Tk option database.</p>
352
353</li>
354<li><p>When used to query options, the configure() method now returns the
355 resource class and name of the options.</p>
356
357</li></ul>
358<p> 19 September 1997</p>
359
360<ul><li><p>Changed functions datestringtoint() and timestringtoint() to
361 datestringtojdn() and timestringtoseconds(). Changed return value
362 of datestringtojdn() to be Julian Day Numbers rather than seconds
363 since the epoch.</p>
364
365</li>
366<li><p>Fixed a bug in the date Counter due to use of time.timezone, by
367 replacing, when calculating date increments, calls to the time
368 module with calls to datestringtojdn().</p>
369
370</li>
371<li><p>Added century pivot year (setyearpivot function) to Counter date
372 datatypes to handle two-digit years.</p>
373
374</li>
375<li><p>Added date_dmy4, date_mdy4 and date_y4md datatypes to Counter.</p>
376
377</li>
378<li><p>Modified demos All.py and ScrolledText.py so that demos can be called
379 from directories other than the demos directory. (Case Roole and
380 Guido van Rossum)</p>
381
382</li>
383<li><p>Changed the default for the Pmw.Balloon <em>label_justify</em> option to
384 <em>left</em> to improve appearance of multi-line balloons. Pmw.Balloon
385 now replaces newlines with spaces in the statusHelp string so that
386 the strings look better when displayed in a Pmw.MessageBar.
387 (Andreas Kostyrka)</p>
388
389</li>
390<li><p>Pmw.Blt now calls <em>package require BLT</em> when checking for the
391 existence of Blt, so that it can be loaded if it is not statically
392 linked. (Clemens Hintze, Matthias Klose)</p>
393
394</li>
395<li><p>Copied earthris.gif and flagup.bmp files from Tcl distribution to
396 test directory, just in case they have not been installed.
397 (Jonathan Kelly)</p>
398
399</li>
400<li><p>Lots of improvements to the documentation and documenting recent
401 changes.</p>
402
403</li></ul>
404<p> 16 October 1997</p>
405
406<ul><li><p>Modified Pmw.Balloon and Pmw.ComboBox to work around a bug in the
407 Windows95 version of Tk which caused the popup windows to appear
408 in the wrong place. (Fredrik Lundh and Jerome Gay)</p>
409
410</li>
411<li><p>Added Pmw.maxfontwidth() function. (Rob Pearson)</p>
412
413</li></ul>
414<p> 24 October 1997</p>
415
416<ul><li><p>Changed PmwBase._reporterror to handle the class exceptions of
417 python 1.5. (Case Roole)</p>
418
419</li></ul>
420<p> 29 October 1997</p>
421
422<ul><li><p>Fixed a bug in forwardmethods() function which occurred if the
423 <em>toClass</em> class had a method called <strong>type</strong>.</p>
424
425</li></ul>
426<p> 7 November 1997</p>
427
428<ul><li><p>Changed tests/Test._getErrorValue to handle the class exceptions of
429 python 1.5. (Michael McLay)</p>
430
431</li>
432<li><p>Changed bug fix in forwardmethods() function to use the
433 <code>exec execString in d</code> construct. (Guido van Rossum)</p>
434
435</li>
436<li><p>Can now use Pmw.MegaArchetype as a base class just to get option
437 handling; it will not create the hull component unless requested.
438 Moved __str__() and interior() methods from Pmw.MegaToplevel and
439 Pmw.MegaWidget to Pmw.MegaArchetype class.</p>
440
441</li></ul>
442<p> 10 November 1997</p>
443
444<ul><li><p>Added <em>textclass</em> option to Pmw.ScrolledText and <em>listboxclass</em>
445 option for Pmw.ScrolledListBox to allow embedding of custom
446 widgets.</p>
447
448</li>
449<li><p>Added Mitch Chapman's <strong>FontText</strong> module to the <code>demos</code> directory
450 and used it to display the demo source code in color.</p>
451
452</li>
453<li><p>Added two notebook megawwidgets, Pmw.NoteBookR and Pmw.NoteBookS.
454 (Case Roole and Joe Saltiel)</p>
455
456</li>
457<li><p>Added Pmw.ScrolledCanvas megawidget. (Joe Saltiel)</p>
458
459</li>
460<li><p>Added Pmw.TreeBrowse megawidget. (Michael McLay)</p>
461
462</li>
463<li><p>Added Pmw.Group megawidget and modified to use <code>grid()</code> instead
464 of <code>pack()</code>. (Case Roole)</p>
465
466</li>
467<li><p>Release of version 0.5</p>
468
469</li></ul>
470<p> 12 November 1997</p>
471
472<ul><li><p>Added <em>pyclass</em> option to components and removed <em>textclass</em>
473 option from Pmw.ScrolledText and <em>listboxclass</em> option from
474 Pmw.ScrolledListBox. (Suggested by Shen Wang)</p>
475
476</li>
477<li><p>Added label component to Pmw.ButtonBox megawidget.</p>
478
479</li>
480<li><p>Fixed mis-spelling of PmwTreeBrowse in Pmw.py.</p>
481
482</li>
483<li><p>Release of version 0.5.1</p>
484
485</li></ul>
486<p> 5 December 1997</p>
487
488<ul><li><p>The pyclass option can now be None. If so, createcomponent
489 returns None.</p>
490
491</li>
492<li><p>Removed tagtype option from Pmw.Group. Can now use the more
493 general tag_pyclass instead.</p>
494
495</li>
496<li><p>Added tcl call to <code>load {} Blt</code> when testing for presence of Blt.</p>
497
498</li>
499<li><p>Added julian and papal options to Pmw.ymdtojulian and
500 Pmw.juliantoymd functions and made sure divisions give the same
501 result as C even when operands are negative.</p>
502
503</li>
504<li><p>Exported ymdtojulian and juliantoymd functions.</p>
505
506</li>
507<li><p>Fixed bug in activate method. Did not prepend TclError with Tkinter.</p>
508
509</li>
510<li><p>When the Blt busy hold command is called from showbusycursor, the
511 bindtags on the busy window are set so that no events cause
512 callbacks to occur for the toplevel or all bindings. Also, while
513 a busy window is up, the focus is changed to the busy window so
514 that no keyboard events are accepted. This fixes a bug where the
515 Tkinter._nametowidget function could crash with a <code>KeyError: _Busy</code>
516 if there was a binding on a toplevel window and the mouse
517 was pressed while the busy cursor was up.</p>
518
519</li></ul>
520<p> 9 December 1997</p>
521
522<ul><li><p>Fixed bug in Pmw.datestringtojdn() when dealing with century year,
523 such as 2000.</p>
524
525</li></ul>
526<p> 10 December 1997</p>
527
528<ul><li><p>Added <em>where</em> option to <code>Pmw.ScrolledText.importfile()</code>. (Graham
529 Matthews)</p>
530
531</li></ul>
532<p> 16 December 1997</p>
533
534<ul><li><p>Modified Pmw.RadioSelect and Pmw.ButtonBox so that you can no
535 longer index their buttons using regular expressions. This
536 feature seemed to have little use and caused problems with buttons
537 labeled for example <em>a*</em> and <em>b*</em>. (Problem reported by Rob
538 Hooft)</p>
539
540</li>
541<li><p>Added updateFunction option to Pmw.busycallback(). If set, the
542 function will be called just after the command given to
543 Pmw.busycallback(). If the function is set the Tkinter update()
544 method, then this will clear any events that may have occurred
545 while the command was executing.</p>
546
547</li></ul>
548<p> 30 December 1997</p>
549
550<ul><li><p>Changed ymdtojulian and juliantoymd functions to jdntoymd and
551 ymdtojdn, because the meaning of "julian" is ambiguous, whereas
552 the meaning of "Julian Day Number" is not (maybe).</p>
553
554</li>
555<li><p>Converted Pmw to use python 1.5 package mechanism. (Michael McLay
556 and Case Roole)</p>
557
558</li>
559<li><p>Removed Pmw.py and PmwLazy files. Added __init__.py, PmwLoader.py
560 and Pmw.def files. (Case Roole)</p>
561
562</li>
563<li><p>Applications can now specify at runtime which version of Pmw to
564 use and also which alpha versions, if any. (Case Roole)</p>
565
566</li>
567<li><p>Modified Pmw code for the version of Tkinter released with python
568 1.5.</p>
569
570</li>
571<li><p>Release of version 0.6</p>
572
573</li></ul>
574<p> 5 January 1998</p>
575
576<ul><li><p>Fixed alpha version handling so that alpha versions do not have to
577 supply PmwBase.py and PmwUtils.py. (Case Roole)</p>
578
579</li>
580<li><p>Added example alpha directory and documentation. (Case Roole)</p>
581
582</li></ul>
583<p> 7 January 1998</p>
584
585<ul><li><p>Added selectmode option to Pmw.RadioSelect megawidget. (Roman
586 Sulzhyk)</p>
587
588</li>
589<li><p>Added some changes to Pmw.ScrolledCanvas to get around some bugs.
590 (Joe Saltiel)</p>
591
592</li>
593<li><p>Release of version 0.6.1</p>
594
595</li></ul>
596<p> 8 January 1998</p>
597
598<ul><li><p>Added some more changes to Pmw.ScrolledCanvas. (from Joe Saltiel)</p>
599
600</li></ul>
601<p> 12 January 1998</p>
602
603<ul><li><p>Added Pmw.OptionMenu megawidget. (Roman Sulzhyk)</p>
604
605</li></ul>
606<p> 20 February 1998</p>
607
608<ul><li><p>Added new Pmw.MenuBar features to delete menus and menuitems,
609 enable and disable menu bar and to add cascade menus. (Rob Pearson)</p>
610
611</li>
612<li><p>Added extra arguments to Pmw.Color.spectrum for more control over
613 color choice.</p>
614
615</li></ul>
616<p> 23 February 1998</p>
617
618<ul><li><p>Added canvasbind() method to Pmw.Balloon.</p>
619
620</li>
621<li><p>Fixed demos/All.py so that it will correctly determine which Pmw
622 version to use even if it is in a directory symlinked to the demos
623 directory.</p>
624
625</li>
626<li><p>Removed "import DemoVersion" from all demos, except All.py, so
627 that they will work unchanged when copied outside of the Pmw
628 distribution.</p>
629
630</li>
631<li><p>Release of version 0.6.2</p>
632
633</li></ul>
634<p> 26 February 1998</p>
635
636<ul><li><p>Fixed PmwLoader so that it works on Macintoshes. (Jack Jansen)</p>
637
638</li></ul>
639<p> 2 March 1998</p>
640
641<ul><li><p>Fixed PmwBase and PmwBlt so that an attempt is made to dynamically
642 load Blt before it is used. Previously only attempted to load Blt
643 when calling showbusycursor.</p>
644
645</li></ul>
646<p> 16 March 1998</p>
647
648<ul><li><p>Added hulldestroyed() method.</p>
649
650</li>
651<li><p>Modified displayerror() function to use value given to
652 reporterrorstofile() if it is set.</p>
653
654</li>
655<li><p>Fixed bug in Pmw.EntryField which occurred when the <em>command</em>
656 option destroyed the megawidget.</p>
657
658</li>
659<li><p>Pmw.EntryField invoke method now passes on the value returned by
660 the <em>command</em> function.</p>
661
662</li></ul>
663<p> 3 April 1998</p>
664
665<ul><li><p>Added Pmw.ScrolledFrame megawidget. (Joe Saltiel)</p>
666
667</li>
668<li><p>Color.rgb2hsi() now uses the built-in <code>min()</code> and <code>max()</code> functions.</p>
669
670</li></ul>
671<p> 20 April 1998</p>
672
673<ul><li><p>Moved time and date functions from PmwCounter.py to new file,
674 PmwTimeFuncs.py.</p>
675
676</li>
677<li><p>Added optional <em>separator</em> argument to <code>timestringtoseconds</code> and
678 <code>datestringtojdn</code> functions. These functions are now stricter
679 when checking if a string is a valid date or time. For example,
680 it now checks for correct day in month, month in year, etc. These
681 changes also affect the Pmw.Counter date and time validators.</p>
682
683</li>
684<li><p>The <code>datestringtojdn</code> function now accepts all combinations of
685 <strong>'d'</strong>, <strong>'m'</strong>, <strong>'y'</strong> as format string.</p>
686
687</li>
688<li><p>Moved functions to bottom of file and class to top of file in
689 PmwEntryField.py and PmwCounter.py.</p>
690
691</li>
692<li><p>The validation for Pmw.EntryField <em>integer</em>, <em>hexadecimal</em> and
693 <em>real</em> types now use string.atol or string.atof rather than
694 regular expressions.</p>
695
696</li>
697<li><p>The validation for the Pmw.EntryField <em>real</em> type accepts a
698 <em>separator</em> argument, for those who prefer a comma instead of a
699 full stop/period/point as the decimal dividing symbol.</p>
700
701</li>
702<li><p>The Pmw.EntryField <em>time*</em> and <em>date_*</em> validators have been
703 removed. The functionality can be replaced by using the new
704 <em>time</em> and <em>date</em> validators with <em>min</em> and <em>max</em> fields.</p>
705
706</li>
707<li><p>The Pmw.EntryField <em>maxwidth</em> option has been removed. The
708 functionality can be replaced by using the <em>max</em> field of the
709 validator.</p>
710
711</li>
712<li><p>Added an <em>extravalidators</em> option to Pmw.EntryField. This allows
713 new types of validation to be added, particularly in classes
714 derived from Pmw.EntryField. It also allows the use of different
715 names for the same validation, by using aliases. Added
716 SpecialEntry demo to show <em>extravalidators</em> option, based on work
717 by Joachim Schmitz.</p>
718
719</li>
720<li><p>Fixed a bug in Pmw.EntryField when combining use of <em>value</em> and
721 <em>entry_textvariable</em> options.</p>
722
723</li>
724<li><p>The Pmw.EntryField <em>validate</em> option now also accepts a dictionary
725 to handle minimum and maximum validation and to allow the passing
726 of other arguments to the validating functions, such as date, time
727 and number formats and separators.</p>
728
729</li>
730<li><p>Fixed bug in Pmw.EntryField where the entry would scroll to the
731 start of the text if an invalid character was typed.</p>
732
733</li>
734<li><p>Added checkentry() method to Pmw.EntryField, so that it can be
735 updated if the entry widget is tied to a textvariable.</p>
736
737</li></ul>
738<p> 10 May 1998</p>
739
740<ul><li><p>The activate() method now takes a geometry option to allow more
741 flexible positioning of the modal dialog.</p>
742
743</li>
744<li><p>Fixed rarely occurring bug in deactivate() method if it is called
745 (perhaps from a timer) during the call to wait_visibility() in the
746 activate() method. This bug used to generate an error and the
747 application would not exit properly.</p>
748
749</li>
750<li><p>Fixed another rarely occurring bug in deactivate() method if it is
751 called while another application has the grab.</p>
752
753</li>
754<li><p>Removed "sys.exc_traceback = None" for except clauses which used
755 to be required by python 1.4 so that references to objects in the
756 stack trace would not be left.</p>
757
758</li>
759<li><p>Now uses sys.exc_info() function when displaying exception
760 traceback.</p>
761
762</li>
763<li><p>The <strong>state</strong> option of Pmw.Balloon and the <strong>orient</strong> option of
764 several others now generate an exception if they have a bad value.</p>
765
766</li>
767<li><p>Added a deactivatecommand option to Pmw.MegaToplevel which can be
768 used, for example, to cancel timers.</p>
769
770</li>
771<li><p>Made changes to Pmw.Counter so that the entry display continuously
772 changes when arrow key presses are repeated quickly.</p>
773
774</li>
775<li><p>Made changes to Pmw.Counter so that the insertion cursor is maintained
776 while counting and the entry scrolls to the end if the value is long.</p>
777
778</li>
779<li><p>Pmw.Counter now behaves correctly when counting past the maximum
780 and minimum values of the EntryField.</p>
781
782</li></ul>
783<p> 28 May 1998</p>
784
785<ul><li><p>Made all Pmw.EntryField standard validators publicly available
786 as <code>Pmw.numericvalidator</code>, etc.</p>
787
788</li>
789<li><p>Now uses faster <code>string.replace()</code> instead of <code>regsub.gsub()</code> when
790 applicable.</p>
791
792</li>
793<li><p>If the <em>balloonHelp</em> argument of the Pmw.Balloon bind methods is
794 <strong>None</strong>, no balloon is displayed.</p>
795
796</li>
797<li><p>Merged the code from the PmwUtils module (forwardmethods()) into
798 PmwBase, since it was always used, was used nowhere else, and made
799 freezing a little more complicated.</p>
800
801</li>
802<li><p>Added a short delay between calling Tkinter bell() method (sounds nicer).</p>
803
804</li>
805<li><p>The functions <code>datestringtojdn()</code> and <code>timestringtoseconds()</code> now
806 return ValueError on invalid input.</p>
807
808</li>
809<li><p>Created bundlepmw.py, to help when freezing in Pmw. Placed in bin
810 directory.</p>
811
812</li></ul>
813<p> 29 May 1998</p>
814
815<ul><li><p>Fixed rare bug in Pmw.Counter which occured if the counter was
816 unmapped while the mouse button was held down over an arrow button.</p>
817
818</li>
819<li><p>Created contrib directory and placed PmwVerticalGuage.py in it.
820 (Chris Wright)</p>
821
822</li>
823<li><p>Patched PmwNoteBookR.py. (Siggy Brentrup)</p>
824
825</li>
826<li><p>Added addoptions() method to Pmw.MegaArchetype class. (Dieter Maurer)</p>
827
828</li>
829<li><p>By default, MenuBar creates hotkeys for menus and menu items for
830 keyboard traversal. Added traversSpec argument to MenuBar add
831 methods. (Michael McLay)</p>
832
833</li></ul>
834<p> 31 May 1998</p>
835
836<ul><li><p>Cleaned up bbox() methods in Pmw.ScrolledCanvas and
837 Pmw.ScrolledListBox.</p>
838
839</li>
840<li><p>The createcomponent() method now disallows the creation of
841 component names containing an underscore, since the query
842 functions would not be able to find them.</p>
843
844</li></ul>
845<p> 2 June 1998</p>
846
847<ul><li><p>Release of version 0.7</p>
848
849</li></ul>
850<p> 3 June 1998</p>
851
852<ul><li><p>Moved Pmw.TreeBrowse megawidget to contrib directory.</p>
853
854</li></ul>
855<p> 17 June 1998</p>
856
857<ul><li><p>Added PmwFullTimeCounter.py to contrib directory (Daniel Michelson)</p>
858
859</li></ul>
860<p> 1 July 1998</p>
861
862<ul><li><p>Changed mispelt file PmwVerticalGuage.py to PmwVerticalGauge.py
863 in contrib directory.</p>
864
865</li></ul>
866<p> 7 July 1998</p>
867
868<ul><li><p>Fixed bug in Pmw.Counter real datatype. Sometimes incorrectly
869 counted negative decimal fractions. (Reported by David Ascher)</p>
870
871</li></ul>
872<p> 12 July 1998</p>
873
874<ul><li><p>The <em>format</em> argument of Pmw.datestringtojdn() now defaults to
875 <strong>'ymd'</strong>.</p>
876
877</li>
878<li><p>Removed Tkinter_test.py from tests since it does not test any Pmw
879 functionality (only Tkinter) and it fails under MS-Windows 95.</p>
880
881</li></ul>
882<p> 23 August 1998</p>
883
884<ul><li><p>Changed several exception types to be more consistent.</p>
885
886</li>
887<li><p>Made the interface to Pmw.Blt.Vector more like the builtin python
888 list type.</p>
889
890</li>
891<li><p>It is no longer an error to call Pmw.setversion() or
892 Pmw.setalphaversions() after initialisation, as long as the
893 requested version matches the actual version.</p>
894
895</li>
896<li><p>Fixed Pmw.NoteBookR so that it behaves better when the
897 highlightthickness is changed.</p>
898
899</li>
900<li><p>The setyearpivot() function now returns a tuple containing the old
901 values of <em>pivot</em> and <em>century</em>.</p>
902
903</li>
904<li><p>Added PmwFileDialog.py to contrib directory (Rob Hooft)</p>
905
906</li>
907<li><p>Modified demos so that full tracebacks are displayed if an error
908 occurs when importing a module.</p>
909
910</li>
911<li><p>Removed justify() method from Pmw.ScrolledListBox, since it is
912 just a wrapper around the xview and yview methods of the listbox.
913 Also, it was not a permanent justification, as the name implied.</p>
914
915</li></ul>
916<p> 20 September 1998</p>
917
918<ul><li><p>Changed implementation of Pmw.ScrolledCanvas.</p>
919
920</li>
921<li><p>Added <strong>borderframe</strong> option to Pmw.ScrolledText and Pmw.ScrolledCanvas.</p>
922
923</li></ul>
924<p> 18 October 1998</p>
925
926<ul><li><p>Major overhaul of all scrolled widgets. Modified all to use
927 similar structure, given the peculiarities of each. Fixed several
928 subtle bugs.</p>
929
930</li>
931<li><p>Pmw.ScrolledFrame: now uses a frame positioned within a clipping
932 frame using the place geometry manager. Added borderframe,
933 horizflex, horizfraction, usehullsize, vertflex, vertfraction
934 options. Added reposition() method. Removed getFrame() method;
935 use interior() method instead.</p>
936
937</li>
938<li><p>Pmw.ScrolledListBox: added usehullsize option.</p>
939
940</li>
941<li><p>Pmw.ScrolledText: added borderframe and usehullsize options.</p>
942
943</li>
944<li><p>Pmw.ScrolledCanvas: simplified widget structure. Added
945 borderframe, canvasmargin, scrollmargin and usehullsize options.
946 Added label.</p>
947
948</li>
949<li><p>Modified Pmw.OptionMenu to use standard widgets rather than call
950 tcl procedure. Added <strong>initialitem</strong> option. Now handles
951 <strong>menubutton_textvariable</strong> component option correctly.</p>
952
953</li></ul>
954<p> 1 November 1998</p>
955
956<ul><li><p>Documented more Pmw functions and Pmw.ComboBox.</p>
957
958</li></ul>
959<p> 15 November 1998</p>
960
961<ul><li><p>Fixed some bugs, cleaned up code and wrote documentation for
962 Pmw.Group. Removed <strong>ringpadx</strong> and <strong>ringpady</strong> options, since this
963 functionality is more generally available by padding the
964 megawidget itself and by padding the children of the megawidget.
965 Modified Pmw.aligngrouptags so that it takes into account the
966 borderwidth and highlightthickness of the ring and so that it
967 works when there is no tag widget. Added <strong>tagindent</strong> option.</p>
968
969</li></ul>
970<p> 18 November 1998</p>
971
972<ul><li><p>Renamed canvasbind() and canvasunbind() methods of Pmw.Balloon to
973 tagbind() and tagunbind() and modified so that they work with both
974 Tkinter.Canvas items and Tkinter.Text tagged items.</p>
975
976</li></ul>
977<p> 19 November 1998</p>
978
979<ul><li><p>Added havebltbusy() method to Pmw.Blt. (Robin Becker)</p>
980
981</li></ul>
982<p> 21 November 1998</p>
983
984<ul><li><p>Modified contrib/PmwFileDialog.py so that when a file is selected
985 with the mouse, the highlight (in the file list) persists and the
986 file list does not scroll to the top. (Rob Hooft)</p>
987
988</li>
989<li><p>Modified Pmw.Balloon so that it can be bound to a tag associated
990 with several Canvas or Text items. (Magnus Kessler)</p>
991
992</li></ul>
993<p> 21 November 1998</p>
994
995<ul><li><p>Cleaned up appearance and colors of Pmw.NoteBookR tabs. (Georg
996 Mischler)</p>
997
998</li>
999<li><p>Added <strong>buttontype</strong> option to Pmw.RadioSelect to support
1000 radiobuttons and checkbuttons. (Georg Mischler)</p>
1001
1002</li></ul>
1003<p> 23 November 1998</p>
1004
1005<ul><li><p>Updated usage of <code>bind_class(tag)</code> due to change in return value
1006 in Tkinter module in python 1.5.2. (Magnus Kessler, Fredrik Lundh)</p>
1007
1008</li>
1009<li><p>The default time displayed in Pmw.TimeCounter is now the current
1010 local time, not GMT as before.</p>
1011
1012</li>
1013<li><p>The times displayed in the Counter demonstration are now the
1014 current local time, not GMT as before.</p>
1015
1016</li></ul>
1017<p> 7 December 1998</p>
1018
1019<ul><li><p>Modified Pmw.ComboBox to take advantage of the fix to the Tkinter
1020 <code>bind()</code> method callback handling of <code>Event.widget</code> in python
1021 1.5.2. It works even if the <strong>selectioncommand</strong> destroys the
1022 combobox. For simple comboboxes, the invoke() method now returns
1023 the return value of the <strong>selectioncommand</strong>.</p>
1024
1025</li>
1026<li><p>Modified Pmw.EntryField to take advantage of the fix to the
1027 Tkinter <code>bind()</code> method callback handling of <code>Event.widget</code> in
1028 python 1.5.2. It works even if a user-supplied callback
1029 (<strong>command</strong>, <strong>invalidcommand</strong>, <strong>validator</strong> or <strong>stringtovalue</strong>)
1030 destroys the entryfield. Cleans up correctly when destroyed. The
1031 invoke() method now returns the return value of the <strong>command</strong>.</p>
1032
1033</li>
1034<li><p>The invoke() method of Pmw.TimeCounter now returns the return
1035 value of the <strong>command</strong>.</p>
1036
1037</li>
1038<li><p>Modified Pmw.ButtonBox to use the new (in Tk8.0) <strong>default</strong> option
1039 of the Tkinter <strong>Button</strong> widget instead of a separate frame.
1040 Changed default padding to be more compact. Removed "ring" frame
1041 component and "ringborderwidth", "ringpadx" and "ringpady"
1042 options. (Georg Mischler)</p>
1043
1044</li>
1045<li><p>Changed <strong>'pmw1'</strong> fontScheme to set default fonts only when running
1046 under posix, since the default fonts on other systems look better.</p>
1047
1048</li></ul>
1049<p> 10 December 1998</p>
1050
1051<ul><li><p>Release of version 0.8</p>
1052
1053</li></ul>
1054<p> 20 January 1999</p>
1055
1056<ul><li><p>Added <strong>master</strong> option to Pmw.MegaToplevel and removed <strong>master</strong>
1057 argument from the activate method.</p>
1058
1059</li>
1060<li><p>Replaced rand module in demos with a simple random number
1061 generator (since rand is not built-in on all versions of python).</p>
1062
1063</li></ul>
1064<p> 22 February 1999</p>
1065
1066<ul><li><p>Modified <code>__init__.py</code> so that it only accepts directories whose
1067 names begin with <strong>Pmw_M_N</strong> and which have a /lib/PmwLoader.py/
1068 file.</p>
1069
1070</li></ul>
1071<p> 13 May 1999</p>
1072
1073<ul><li><p>Changed Pmw.ScrolledCanvas, Pmw.ScrolledText and Pmw.ScrolledListBox
1074 to speed up scrolling if the scrollmodes are not both dynamic.</p>
1075
1076</li>
1077<li><p>Changed busy cursor and activate/deactivate code so that it works
1078 correctly under fast mouse clicking or fast keyboarding (using
1079 accelerators). Also fixed so that grab is correctly restored
1080 after a Pmw.ComboBox popup list is unmapped inside a modal dialog.
1081 (Clemens Hintze)</p>
1082
1083</li>
1084<li><p>Several dialogs now give focus to one of their components (listbox
1085 or entry widget) when activated. (Clemens Hintze)</p>
1086
1087</li>
1088<li><p>Fixed Pmw.ComboBox so that it unposts popup if the combobox is
1089 unmapped and returns grab and focus correctly if destroyed.</p>
1090
1091</li>
1092<li><p>Improved tracetk() output to be more readable. Also displays
1093 nested calls to the Tk mainloop better and shows callbacks from
1094 tcl to python.</p>
1095
1096</li>
1097<li><p>Upgraded Blt support to blt2.4i. Graph widget is not backwards
1098 compatible with blt2.1.</p>
1099
1100</li></ul>
1101<p> 19 May 1999</p>
1102
1103<ul><li><p>Fixed bug in Pmw.Balloon in placement of balloons over canvas
1104 items when the canvas was scrolled. (Tessa Lau)</p>
1105
1106</li></ul>
1107<p> 20 May 1999</p>
1108
1109<ul><li><p>Added new Tk event types (new in Tk 8.0 and 8.0.5) to PmwBase
1110 error display method. Also added check for unknown event types to
1111 safeguard against future changes. (Magnus Kessler)</p>
1112
1113</li>
1114<li><p>Added <strong>exclude</strong> argument to <code>showbusycursor()</code>. (Rob Hooft)</p>
1115
1116</li></ul>
1117<p> 1 June 1999</p>
1118
1119<ul><li><p>Added wrappers for Blt Stripchart and Tabset widgets. (Nick Belshaw)</p>
1120
1121</li>
1122<li><p>Changed createcomponent() so that arguments to the constructor of
1123 the component can now be specified as either multiple trailing
1124 arguments to createcomponent() or as a single tuple argument.</p>
1125
1126</li></ul>
1127<p> 7 June 1999</p>
1128
1129<ul><li><p>Added call to update_idletasks() in Pmw.ScrolledCanvas,
1130 Pmw.ScrolledFrame, Pmw.ScrolledText and Pmw.ScrolledListBox to
1131 avoid endless mapping/unmapping of two dynamic scrollbars when the
1132 window is first mapped and only one scrollbar is needed.
1133 (Reported by Mark C Favas, solution suggested by Dieter Maurer.)</p>
1134
1135</li></ul>
1136<p> 10 June 1999</p>
1137
1138<ul><li><p>Fixed bug in bundlepmw.py when called with -noblt option.
1139 (Reported by Kevin O'Connor)</p>
1140
1141</li>
1142<li><p>Pmw.ComboBox now unposts the dropdown listbox before the selection
1143 callback is invoked, to avoid problems when the callback takes a
1144 long time to run. (Reported by Randall Hopper)</p>
1145
1146</li></ul>
1147<p> 11 June 1999</p>
1148
1149<ul><li><p>Release of version 0.8.1</p>
1150
1151</li></ul>
1152<p> 29 June 1999</p>
1153
1154<ul><li><p>PmwMessageBar.message() now replaces newlines with spaces before
1155 displaying message. Also applies to helpmessage().</p>
1156
1157</li></ul>
1158<p> 2 July 1999</p>
1159
1160<ul><li><p>Improved toplevel window positioning under NT, and stopped most of
1161 the ugly flashing.</p>
1162
1163</li></ul>
1164<p> 5 July 1999</p>
1165
1166<ul><li><p>The <strong>pmw1</strong> fontScheme is now supported under NT, as is the <em>size</em>
1167 option to <code>Pmw.initialise()</code>.</p>
1168
1169</li></ul>
1170<p> 6 July 1999</p>
1171
1172<ul><li><p>Changed the names of positional arguments in the following
1173 methods, so that they have less chance of conflicting with keyword
1174 arguments: MegaArchetype.createcomponent(), ButtonBox.insert(),
1175 ButtonBox.add(), MenuBar.addcascademenu(), MenuBar.addmenuitem()
1176 and RadioSelect.add().</p>
1177
1178</li></ul>
1179<p> 9 July 1999</p>
1180
1181<ul><li><p>Added images and example code to the megawidget reference manuals.
1182 (Suggested by Joerg Henrichs)</p>
1183
1184</li>
1185<li><p>Fixed showbusycursor() under NT. It now calls update() instead of
1186 update_idletasks() to force display of cursor. (Solution
1187 suggested by George Howlett)</p>
1188
1189</li>
1190<li><p>Improved display of arrows in ComboBox, Counter and TimeCounter.</p>
1191
1192</li></ul>
1193<p> 16 July 1999</p>
1194
1195<ul><li><p>Removed Pmw.maxfontwidth() function, since better functionality is
1196 now supplied by the Tk "font measure" command.</p>
1197
1198</li>
1199<li><p>Removed Pmw.fontexists() function, since in Tk8.0 all fonts exist.</p>
1200
1201</li></ul>
1202<p> 28 July 1999</p>
1203
1204<ul><li><p>Fixed bug in date counter with separator other than <strong>'/'</strong> and time
1205 counter with separator other than <strong>':'</strong>. (David M. Cooke, Alan
1206 Robinson)</p>
1207
1208</li>
1209<li><p>Under NT, the font named <strong>'fixed'</strong> is not fixed width, so added
1210 alias from <strong>'Fixed'</strong> to <strong>'Courier'</strong>.</p>
1211
1212</li>
1213<li><p>Changed the <code>bind()</code> and <code>tagbind()</code> methods of Pmw.Balloon to
1214 remove a potential memory leak. The methods now store the
1215 <em>funcids</em> of the callback functions, so that if the same widget or
1216 tag is bound twice, the balloon can remove the old bindings.
1217 (Peter Stoehr)</p>
1218
1219</li>
1220<li><p>Changed NoteBookR so that lowercmd, creatcmd and raisecmd are
1221 called in that order when a page is selected. Also fixed bug
1222 which always raised page 0 when notebook is resized. (Scott
1223 Evans, Charles Choi)</p>
1224
1225</li></ul>
1226<p> 1 August 1999</p>
1227
1228<ul><li><p>Added <strong>dynamicGroups</strong> argument to <code>defineoptions()</code> method and
1229 modified ButtonBox, MenuBar, PanedWidget, RadioSelect to register
1230 their dynamic groups.</p>
1231
1232</li>
1233<li><p><code>Pmw.initialise()</code> can now be called multiple times, with
1234 different <em>root</em> arguments, but only sequentially. Pmw does not
1235 (yet) support multiple simultaneous interpreters. Modified
1236 Pmw.EntryField so that it recreates class bindings when
1237 Tkinter.root changes.</p>
1238
1239</li></ul>
1240<p> 4 August 1999</p>
1241
1242<ul><li><p>Added relmouse option to Pmw.Balloon. Fixed Pmw.Balloon so that
1243 the balloon is not displayed off-screen. (Tessa Lau)</p>
1244
1245</li></ul>
1246<p> 16 August 1999</p>
1247
1248<ul><li><p>Added disableKeyboardWhileBusy option to initialise(). To ignore
1249 keyboard input while displaying the busy cursor, Pmw sets the
1250 focus for each toplevel window to the Blt busy window. However,
1251 under NT, this causes each window to be raised. If this is not
1252 acceptable, programs running on NT can request show/hidebusycursor
1253 not to ignore keyboard input. </p>
1254
1255</li></ul>
1256<p> 25 August 1999</p>
1257
1258<ul><li><p>Added Pmw.Blt.busy_forget() and used it in Pmw.hidebusycursor()
1259 when running under NT. There is a bug in the Blt busy release
1260 command under NT where it sometimes fails to display the busy
1261 cursor. Using busy forget avoids the problem.</p>
1262
1263</li></ul>
1264<p> 27 September 1999</p>
1265
1266<ul><li><p>Added busyCursorName option to Pmw.initialise() and added cursor
1267 argument to Pmw.Blt.busy_hold(). (Mark Favas)</p>
1268
1269</li></ul>
1270<p> 20 October 1999</p>
1271
1272<ul><li><p>Replaced Pmw.NoteBookR and Pmw.NoteBookS with completely rewritten
1273 Pmw.NoteBook.</p>
1274
1275</li>
1276<li><p>Renamed Pmw.OptionMenu.get() to Pmw.OptionMenu.getcurselection()
1277 and Pmw.PanedWidget.remove() to Pmw.PanedWidget.delete(), to be
1278 more consistent with other megawidgets.</p>
1279
1280</li>
1281<li><p>The index() method of several megawidgets now use Pmw.END,
1282 Pmw.SELECT and Pmw.DEFAULT instead of strings, since these may
1283 conflict with component names. </p>
1284
1285</li>
1286<li><p>Pmw.OptionMenu.index() now uses Pmw.SELECT to return
1287 index of the currently selected menu item, rather than None.</p>
1288
1289</li>
1290<li><p>Added destroy() method to Pmw.MegaArchetype to handle cleaning up
1291 of _hullToMegaWidget mapping. </p>
1292
1293</li>
1294<li><p>Removed exclude argument from Pmw.showbusycursor() and added
1295 Pmw.excludefrombusycursor() function instead. (Rob Hooft)</p>
1296
1297</li>
1298<li><p>Fixed several bugs for Windows NT.</p>
1299
1300</li>
1301<li><p>Added Pmw.ButtonBox.button() and Pmw.RadioSelect.button().</p>
1302
1303</li>
1304<li><p>Added Pmw.Color.bordercolors().</p>
1305
1306</li></ul>
1307<p> 21 October 1999</p>
1308
1309<ul><li><p>Release of version 0.8.3. (Version 0.8.2 was not released.)</p>
1310
1311</li></ul>
1312<p> 30 October 1999</p>
1313
1314<ul><li><p>Added arrownavigation option and previouspage() and nextpage()
1315 methods to Pmw.NoteBook. (Peter Funk)</p>
1316
1317</li>
1318<li><p>Renamed the <code>setnaturalpagesize()</code> method of Pmw.NoteBook to
1319 <code>setnaturalsize()</code> to be consistent with Pmw.PanedWidget.</p>
1320
1321</li>
1322<li><p>Changed Pmw.excludefrombusycursor() to Pmw.setbusycursorattributes().
1323 Removed busyCursorName option from Pmw.initialise() and added
1324 cursorName attribute to Pmw.setbusycursorattributes().</p>
1325
1326</li>
1327<li><p>Added documentation source and build scripts to ftp site.</p>
1328
1329</li></ul>
1330<p> 6 November 1999</p>
1331
1332<ul><li><p>Fixed memory leaks when destroying megawidgets. Added automatic
1333 check for memory leak to test script used by all tests.
1334 Pmw.initialise() now uses a hook into Tkinter.Widget.destroy
1335 rather than Tkinter.Frame.destroy to handle the case of
1336 Pmw.NoteBook being destroyed (since the notebook hull is a canvas
1337 and not a frame). Window manager delete protocol callbacks are
1338 now cleaned up. Pmw.ScrolledListBox event bindings now do not
1339 leak. (Reported by Jeff Weeks)</p>
1340
1341</li>
1342<li><p>Removed key bindings for Pmw.ScrolledListBox except space and return keys.</p>
1343
1344</li></ul>
1345<p> 20 November 1999</p>
1346
1347<ul><li><p>Fixed bug in Pmw.Balloon when the canvas or text item that
1348 triggered the balloon is deleted before the balloon is displayed
1349 by the <strong>initwait</strong> timer. (Magnus Kessler)</p>
1350
1351</li>
1352<li><p>Added <strong>'nograb'</strong> to <em>globalMode</em> option of <code>activate()</code> method. (Rob Hooft)</p>
1353
1354</li>
1355<li><p>Added __setitem__ method to Pmw.MegaArchetype, so that megawidget
1356 options can be now set using <code>megawidget['option'] = value</code> style.
1357 (Oliver Gathmann)</p>
1358
1359</li></ul>
1360<p> 27 December 1999</p>
1361
1362<ul><li><p>Converted from <code>regex</code> module to <code>re</code> module, since <code>regex</code> is not
1363 implemented for Jpython. (Finn Bock)</p>
1364
1365</li></ul>
1366<p> 30 December 1999</p>
1367
1368<ul><li><p>Added <code>clear()</code> method to Pmw.ScrolledListBox (suggested by Carson
1369 Fenimore).</p>
1370
1371</li></ul>
1372<p> 15 March 2000</p>
1373
1374<ul><li><p>Fixed problem in PmwBase when deleting windows that were created
1375 before Pmw was initialised (such as splash windows displayed while
1376 the application is coming up). (Mark Favas)</p>
1377
1378</li>
1379<li><p>Added splash window to Pmw demo. (Mark Favas)</p>
1380
1381</li></ul>
1382<p> 30 April 2000</p>
1383
1384<ul><li><p>Added Pmw.MainMenuBar megawidget, which uses the menubar feature
1385 of Tk to provide platform specific menu bars.</p>
1386
1387</li>
1388<li><p>Fixed Pmw.Counter and several other megawidgets so that certain
1389 <strong>hull</strong> constructor keywords, such as <strong>hull_relief</strong> and
1390 <strong>hull_borderwidth</strong>, are not overriden in the constructor.</p>
1391
1392</li>
1393<li><p>Thanks to Peter Cashin for his help on how to unpack gzipped tar
1394 files on Microsoft Windows operating systems.</p>
1395
1396</li>
1397<li><p>Added Pmw.HistoryText megawidget. This can be used as the basis
1398 of an interactive text-based database query gui. It maintains a
1399 history of each query and allows editing of prior queries.</p>
1400
1401</li>
1402