]> SALOME platform Git repositories - tools/eficas.git/blob - Pmw/Pmw_1_2/doc/changes.html
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Pmw / Pmw_1_2 / doc / changes.html
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 <li><p>Added references to the Pmw.Blt.Graph documentation by Bjørn Ove
1403     Thue and Hans Petter Langtangen.</p>
1404
1405 </li>
1406 <li><p>Searched for and fixed memory leaks. There are no more known memory leaks.</p>
1407 <ul><li><p>For commands created by <code>bind</code>:  these are cleaned up by Tkinter
1408       when the widget is destroyed.  Pmw.Balloon, which repeatedly
1409       binds to the same widget (or item, using <code>tag_bind</code>), has been
1410       fixed by passing the old command into the call to <code>unbind</code> or
1411       <code>tag_unbind</code> which is cleaned up by Tkinter.</p>
1412
1413 </li>
1414 <li><p>For commands created by <code>class_bind</code>:  most class bindings are
1415       only created once (per Tk interpreter) and so do not need to be
1416       cleaned up.  The exception is adding and deleting menus in
1417       Pmw.MenuBar.  This has now been fixed to clean up <code>class_bind</code>
1418       commands when deleting menus.</p>
1419
1420 </li>
1421 <li><p>Callbacks given to command, xscrollcommand, yscrollcommand, etc
1422       options are cleaned up by Tkinter when the widget is destroyed. 
1423       Cases where Pmw repeatedly sets such options have now been fixed
1424       to clean up the old command before configuring the new one. 
1425       These are in <code>setitems</code> in Pmw.OptionMenu and when modifying the
1426       scrollcommand options in several of the scrolled widgets.</p>
1427
1428 </li>
1429 <li><p>Pmw now cleans up calbacks it registers with the
1430       WM_DELETE_WINDOW protocol for toplevel windows.</p>
1431
1432 </li></ul>
1433
1434 </li>
1435 <li><p>Added ManualTests.py to tests directory for tests which need to be
1436     run by hand.</p>
1437
1438 </li></ul>
1439 <p>  12 May 2000</p>
1440
1441 <ul><li><p>Release of version 0.8.4.</p>
1442
1443 </li></ul>
1444 <p>  17 May 2000</p>
1445
1446 <ul><li><p>Modified Pmw.Counter to deal with the presence (python up to
1447     1.5.2) or absence (python 1.6 and after) of an <strong>L</strong> at the end of
1448     the ascii representation of a long.  (Mark Favas)</p>
1449
1450 </li>
1451 <li><p>Fixed bug in Pmw.ScrolledFrame when given invalid flex options. 
1452     (Stephen D Evans)</p>
1453
1454 </li></ul>
1455 <p>  23 January 2001</p>
1456
1457 <ul><li><p>Moved Pmw home from www.dscpl.com.au to pmw.sourceforge.net.</p>
1458
1459 </li>
1460 <li><p>Added pmw2 font scheme, since the font used for balloon text with
1461     pmw1 is too small on Linux.</p>
1462
1463 </li>
1464 <li><p>Removed syntax coloring from code window in demos.  It did not
1465     look good and the pattern matching was not always correct.</p>
1466
1467 </li>
1468 <li><p>Changed font size used for demos to 12 for Unix, since 14 looked
1469     too big under Linux.</p>
1470
1471 </li>
1472 <li><p>Minor fixes to tests for Tk 8.3.</p>
1473
1474 </li></ul>
1475 <p>  8 February 2001</p>
1476
1477 <ul><li><p>Release of version 0.8.5</p>
1478
1479 </li></ul>
1480 <p>  18 February 2001</p>
1481
1482 <ul><li><p>Added xview() and yview() methods to Pmw.ScrolledFrame (suggested
1483     by Christer Fernstrom).</p>
1484
1485 </li>
1486 <li><p>Made tktrace output more readable.</p>
1487
1488 </li>
1489 <li><p>Added noBltBusy option to Pmw.initialise.</p>
1490
1491 </li>
1492 <li><p>Fixed bug where combobox dropdown list could stay mapped after
1493     entryfield was unmapped.</p>
1494
1495 </li>
1496 <li><p>Improved scrolling in scrolled frame.</p>
1497
1498 </li></ul>
1499 <p>  21 February 2001</p>
1500
1501 <ul><li><p>Fixed tests for recent version of Blt graph (reported by
1502     Venkatesh Prasad Ranganath).</p>
1503
1504 </li>
1505 <li><p>Fixed problem in Pmw.ScrolledFrame in python 1.5 - string.atof
1506     does not accept a number as argument, but it does in python 2.0.</p>
1507
1508 </li></ul>
1509 <p>  24 February 2001</p>
1510
1511 <ul><li><p>Modified Pmw.OptionMenu documentation to specify that list
1512     elements must be strings (problem reported by Guy Middleton).</p>
1513
1514 </li>
1515 <li><p>Fixed bug in Pmw.OptionMenu where the wrong item was displayed
1516     when an integer item in the menu was selected with the mouse (even
1517     though items should be strings).</p>
1518
1519 </li>
1520 <li><p>Added work around to Pmw.ScrolledFrame for bug in Tk when
1521     retrieving value from scrollbars soon after creation.</p>
1522
1523 </li></ul>
1524 <p>  27 February 2001</p>
1525
1526 <ul><li><p>Added HistoryText and MainMenuBar to bin/bundlepmw.py - accidently
1527     left out.</p>
1528
1529 </li></ul>
1530 <p>  13 April 2001</p>
1531
1532 <ul><li><p>Changed default foreground (text) of Pmw.Balloown to black.  (Eric
1533     Pettersen)</p>
1534
1535 </li>
1536 <li><p>Added default fontScheme to Pmw.initialise().</p>
1537
1538 </li>
1539 <li><p>Added -fontscheme and -fontsize options to demo.</p>
1540
1541 </li>
1542 <li><p>Added updatelayout() to Pmw.PanedWidget for use when dynamically
1543     adding and deleting panes.  (G Cash)</p>
1544
1545 </li>
1546 <li><p>Added move() to Pmw.PanedWidget to move panes.  (G Cash)</p>
1547
1548 </li></ul>
1549 <p>  20 April 2001</p>
1550
1551 <ul><li><p>Fixed bug in Pmw.Balloon where the balloon would reappear if the
1552     mouse button was pressed down inside a widget and then, while the
1553     mouse button was being held down, the mouse was moved outside of
1554     the widget and then moved back over the widget.</p>
1555
1556 </li>
1557 <li><p>Fixed bug in Pmw.Balloon when destroying widgets while the balloon
1558     was up.  In this case, the balloon remained displayed even though
1559     the widget had been destroyed. (Reported by Stefan Schone.)</p>
1560
1561 </li>
1562 <li><p>Fixed bug in Pmw.Balloon when destroying widgets during the
1563     initwait period.  In this case, an error occurred when the
1564     initwait timer went off when it tried to access the destroyed
1565     widget. (Reported by Stefan Schone.)</p>
1566
1567 </li>
1568 <li><p>Fixed Pmw.Balloon so that unbinding withdraws the balloon if
1569     the widget being unbound is the widget which triggered the balloon.</p>
1570
1571 </li>
1572 <li><p>Modified Pmw.Balloon so that when deleting a canvas or text item,
1573     <code>tagunbind()</code> can be called which will withdraw the balloon if it
1574     was triggered by the item.  Unfortunately this can not be
1575     automated as for widgets since Tk does not support &lt;Destroy&gt;
1576     bindings on canvas or text items, so there is no way that
1577     Pmw.Balloon can be notified of the deletion of an item.</p>
1578
1579 </li>
1580 <li><p>Updated tests for python 2.1.</p>
1581
1582 </li></ul>
1583 <p>  21 May 2001</p>
1584
1585 <ul><li><p>Pmw.OptionMenu now defaults to taking focus (on &lt;Tab&gt; key).</p>
1586
1587 </li></ul>
1588 <p>  15 May 2002</p>
1589
1590 <ul><li><p>Fixed bug in Pmw.Graph.element_closest() where element names
1591     should follow option arguments.  (Val Shkolnikov)</p>
1592
1593 </li></ul>
1594 <p>  5 June 2002</p>
1595
1596 <ul><li><p>Added command option to Pmw.TimeCounter.</p>
1597
1598 </li>
1599 <li><p>Finished all documentation.</p>
1600
1601 </li>
1602 <li><p>Fixed bug in documentation creation script which, since python
1603     2.0, printed default values of real options (such as the
1604     horizfraction option of Pmw.ScrolledFrame) with too many digits
1605     (such as 0.050000000000000003).</p>
1606
1607 </li>
1608 <li><p>Fixed bug in setgeometryanddeiconify for cygwin python (John
1609     Williams).</p>
1610
1611 </li></ul>
1612 <p>  4 July 2002</p>
1613
1614 <ul><li><p>Added master option to <code>MegaToplevel.show()</code></p>
1615
1616 </li>
1617 <li><p>Improved <code>MegaToplevel.show()</code> so that tkraise is not called
1618     unecessarily, thus avoiding 2 second delay under certain window
1619     managers (such as sawfish) in most circumstances.  There are still
1620     problems with the Enlightenment window manager.</p>
1621
1622 </li></ul>
1623 <p>  18 August 2002</p>
1624
1625 <ul><li><p>Added columnheader, rowheader and rowcolumnheader components to
1626     Pmw.ScrolledText.  (Rob Pearson)</p>
1627
1628 </li>
1629 <li><p>Added <code>getvalue()</code> and <code>setvalue()</code> methods to several megawidgets
1630     as a consistent way to set and get the user-modifiable state. 
1631     (Cimarron Taylor)</p>
1632
1633 </li>
1634 <li><p>Made sub-classing simpler when no new options or components are
1635     being created.  A sub-class of a Pmw megawidget does not need to
1636     have an __init__() method.  If it does, it does not need to call
1637     defineoptions().  Also, initialiseoptions() no longer requires an
1638     argument (for backwards compatibility it may take an argument, but
1639     it is ignored).</p>
1640
1641 </li></ul>
1642 <p>  24 August 2002</p>
1643
1644 <ul><li><p>Release of version 1.0</p>
1645
1646 </li></ul>
1647 <p>  26 August 2002</p>
1648
1649 <ul><li><p>Minor fixes.</p>
1650
1651 </li>
1652 <li><p>Release of version 1.1</p>
1653
1654 </li></ul>
1655 <p>  4 September 2002</p>
1656
1657 <ul><li><p>Added collapse, expand and toggle methods and collapsedsize option
1658     to Pmw.Group.  (Rob Pearson)</p>
1659
1660 </li></ul>
1661 <p>  5 September 2002</p>
1662
1663 <ul><li><p>Added sticky option to several megawidgets.</p>
1664
1665 </li></ul>
1666 <p>  18 September 2002</p>
1667
1668 <ul><li><p>Added appendtext method to Pmw.ScrolledText.  (Graham Dumpleton)</p>
1669
1670 </li></ul>
1671 <p>  26 September 2002</p>
1672
1673 <ul><li><p>Modified Pmw.ScrolledListBox to call dblclickcommand on
1674     &lt;Double-ButtonRelease-1&gt; rather than &lt;Double-ButtonPress-1&gt; which
1675     caused problems if the double button press unmapped the
1676     ScrolledListBox.  In this case, the second button release of the
1677     double click is given to another widget.  (Eric Pettersen)</p>
1678
1679 </li></ul>
1680 <p>  14 June 2003</p>
1681
1682 <ul><li><p>Changes for python 2.3 and Tcl/Tk 8.4.2:</p>
1683 <ul><li><p>Wrapped calls to cget() for Tkinter widgets in a call to
1684         str().  Before python 2.3 cget() always returned a string. 
1685         Under python 2.3, Tkinter sometimes returns non-string values
1686         (such as int, or Tcl_Obj).  Made similar change when using
1687         configure() to retrieve values.  Fixed tests to handle integer
1688         and Tcl_Obj return value from cget().  (Charles Doutriaux)</p>
1689
1690 </li>
1691 <li><p>Fixed uses of <code>col</code> field of grid command.  Must use full
1692         <code>column</code> under Tcl/Tk 8.4.2.</p>
1693
1694 </li>
1695 <li><p>Fixed PmwEntryField.py, PmwMessageBar.py, PmwScrolledField.py
1696         so that the text is not greyed out under Tcl/Tk 8.4.2.  This
1697         was caused by a change in behaviour of the <strong>'disabled'</strong> state
1698         and the Tk entry widget.  Now use new <strong>'readonly'</strong> state for
1699         Tcl/Tk 8.4.2.</p>
1700
1701 </li>
1702 <li><p>Test script now ignores Blt test for Tcl/Tk 8.4.2, since it
1703         causes Blt 2.4z to core dump.  Blt needs to be fixed.</p>
1704
1705 </li>
1706 <li><p>Changed Dialog test to work around problem caused by Tk 8.4.2
1707         enforcing transient behaviour of windows.  When activate() is
1708         called on a dialog whose parent is withdrawn, then the dialog
1709         window is made transient.  Under old versions of Tk, the
1710         transient dialog was displayed, but under 8.4.2 the dialog is
1711         not displayed.  Work around is to deiconify parent of dialog.</p>
1712
1713 </li></ul>
1714
1715 </li></ul>
1716 <p>  5 August 2003</p>
1717
1718 <ul><li><p>Release of version 1.2</p>
1719
1720 </li></ul>
1721 <p></p>
1722
1723
1724
1725     <center><P ALIGN="CENTER">
1726     <IMG SRC = blue_line.gif ALT = "" WIDTH=320 HEIGHT=5>
1727     </p></center>
1728     
1729
1730     <font size=-1>
1731     <center><P ALIGN="CENTER">
1732     Pmw 1.2 -
1733      5 Aug 2003
1734      - <a href="index.html">Home</a>
1735     
1736     </p></center>
1737     </font>
1738
1739     </body>
1740     </html>
1741